我阅读以下示例可能有所帮助:
jQuery(function($) {
// This version does work, because the window.open is
// during the event processing. But it uses a synchronous
// ajax call, locking up the browser UI while the call is
// in progress.
$("#theButton").click(function(e) {
e.preventDefault();
$.ajax({
url: "http://jsbin.com/uriyip",
async: false,
dataType: "json",
success: function() {
window.open("http://jsbin.com/ubiqev");
}
});
});
});
我用$(window).unload
替换了点击事件,但这也没有帮助。弹出窗口没有打开,但是当我删除e.preventDefault();
时弹出窗口打开,但需要启用弹出窗口阻止程序。
答案 0 :(得分:3)
我认为没有办法绕过弹出窗口拦截器。
您应该更改方法并尝试在jQuery UI modal dialog box中打开内容,而不是使用实际的浏览器窗口弹出窗口。
答案 1 :(得分:1)
您必须在与$.ajax
相同的功能内打开窗口,否则某些浏览器仍会拒绝弹出窗口。
jQuery(function($) {
// This version does work, because the window.open is
// during the event processing. But it uses a synchronous
// ajax call, locking up the browser UI while the call is
// in progress.
$("#theButton").click(function(e) {
// use success flag
var success = false;
e.preventDefault();
$.ajax({
url: "http://jsbin.com/uriyip",
async: false,
dataType: "json",
success: function() {
success = true; // set flag to true
}
});
if (success) { // and read the flag here
window.open("http://jsbin.com/ubiqev");
}
});
});
这是确保uriyip
被调用的唯一可靠方法,并在完成加载后弹出一个窗口;所以它冻结了浏览器,太糟糕了。
答案 2 :(得分:0)
弹出窗口阻止程序旨在防止此行为。
我建议使用模态窗口而不是实际的浏览器窗口。我不认为这些被阻止,因为它们是在页面内打开的。
至于事件......你可以做点像......
window.onbeforeunload = function whatever() {
//Do code here for your modal to show up.
}
如果您只是尝试发出警告或者您可以做的事情
window.onbeforeunload = function showWarning() {
return 'This is my warning to show';
}