gpt4 book ai didi

javascript - 如何防止 Google Chrome 阻止我的弹出窗口?

转载 作者:IT王子 更新时间:2023-10-29 03:10:14 24 4
gpt4 key购买 nike

在我的网站上有一个按钮,它只是用来调用调用 window.open 的函数,但是,最近需要进行调整以在弹出窗口打开之前进行服务器端检查。

自从添加执行 AJAX 调用的代码后,浏览器就会阻止在 AJAX 调用的 success 回调中打开的弹出窗口。我读到如果不是由用户点击事件调用,浏览器可能会阻止弹出窗口,所以我尝试将 AJAX 请求设置为 async: false,这解决了 Firefox 中的问题,但 Google Chrome 仍然阻止我的弹出窗口。有什么办法可以解决这个问题吗?

我可以将服务器端检查移动到在弹出窗口中打开的页面,但如果可能的话,我想在打开弹出窗口之前执行此操作。

代码:

<a id="attackButton" href="#">Attack Base!</a>

<script type="text/javascript">
$(function() {
$('#attackButton').click(function() {
$.ajax({
url: baseurl + '/index.php?option=com_pbbgs&format=raw&getinfo=goingame',
data: { 'gameid': 618 },
dataType: 'text',
async: false,
type: 'POST',
success: function(data) {
eval(data);

if (window.gameURL) {
goingameRaw();
}
}
});

return false;
});
});

function goingameRaw()
{
window.open(window.gameURL,'test','left=20,top=20,width=1024,height=640,toolbar=0,resizable=0,location=0');
}
</script>

示例响应正文:

window.gameURL="http://mydomain.com/index.php?option=com_pbbgs&format=raw&startgame=618&width=1024&height=640";checktutorial('js','attack');

最佳答案

是的,弹出窗口应该是用户操作的直接结果。在 ajax 回调中执行它们不会成功。此外,使用 async:false 是不好的 - 在 FF 中它会阻止整个浏览器。想一些其他的方法来做检查:

  • 这可能是您在弹出窗口中做的第一件事
  • 您可以在点击时打开弹出窗口,稍后在回调触发时对其进行操作
  • 您可以要求用户再次点击某个按钮来触发弹出窗口(可能是最糟糕的解决方案)
  • 你可以在页面加载时完成

关于javascript - 如何防止 Google Chrome 阻止我的弹出窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4602964/

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