gpt4 book ai didi

javascript - 如果在 ajax 中执行完成,则 window.open 被阻止

转载 作者:行者123 更新时间:2023-11-30 12:51:33 24 4
gpt4 key购买 nike

我有这个由点击事件触发的 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 :-(

我应该如何处理这个问题?

最佳答案

如果弹出窗口不是直接响应用户操作而打开,则弹出窗口阻止程序通常会阻止它们。因为 ajax 调用是异步的,所以它的完成函数是在用户操作之后的某个时间,并且就浏览器而言不是直接响应用户操作,因此它可能会被阻止。除了仅在直接响应用户操作时打开弹出窗口外,没有简单的解决方法。

下一个明显的问题/解决方法是您是否真的需要一个单独的浏览器窗口/选项卡?您可以通过在原始窗口中使用覆盖来使您的应用程序正常运行吗?叠加层将具有零限制,您可以用它做任何您想做的事情。

关于javascript - 如果在 ajax 中执行完成,则 window.open 被阻止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20796144/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com