【发布时间】:2013-12-27 06:44:53
【问题描述】:
我有这个由点击事件触发的 JS 函数。它应该存储一些数据,然后打开一个带有输入表单的窗口。原始代码是这样的:
function myClickFunction(){
$('html').mask('Loading...');
SaveData( function(){ //callback function
window.open(...);
$('html').unmask();
});
}
问题是 window.open 被弹出窗口阻止程序阻止。如果我这样做:
function myClickFunction(){
$('html').mask('Loading...');
SaveData();
$('html').unmask();
window.open(...);
}
它工作得很好,但我当然只想在 SaveData() 完成时打开窗口。
SaveData() 执行 ajax 调用,并试图使解决方案 #2 工作,我尝试在 ajax 调用中设置 async: false 但这只会阻止我的 $('html').mask('Loading... ') 调用。
我的设置类似于https://stackoverflow.com/a/11670238/1480182,但另一个问题是它必须在 iPad 上的 Safari 上运行。在这个特定的浏览器中,无法与窗口/选项卡进行通信,这意味着当我打开新窗口时,我会在打开的选项卡上停止任何 js 执行:-(
我应该如何处理这个问题?
【问题讨论】:
-
你需要一个真正的弹出窗口吗?你也许可以覆盖一个全尺寸的 iframe?
-
请参阅下面的评论以回答
-
你能打开一个新窗口来处理
myClickFunction的所有功能吗?即显示加载屏幕,保存数据,然后设置位置。 (您也许可以使用 localStorage 来传输数据。) -
嗯...这可能是一种方式,但是...弹出窗口内容会有所不同,因为这是与多个弹出窗口一起使用的动态解决方案。重写代码以使用 jqueryui 可能更容易。什么是本地存储?这适用于旧版浏览器吗?
-
localStorage 是一个可以持久存储 Web 应用程序数据的地方(所有同源页面都可以访问它)。 cookie 的一个重要区别是它不会在每个请求(或永远)都发送到服务器。它是pretty well supported,但您可以随时使用不支持的 cookie(或使用 polyfill)。
标签: javascript window.open popup-blocker