-1

我有一个奇怪的查询,我想打开一个新窗口(弹出窗口),当使用 asp.net、Jquery 关闭浏览器/选项卡时,但我想绕过阻止窗口的弹出窗口阻止程序,谁能帮我这个,当用户关闭浏览器/选项卡或任何其他可以帮助我实现相同功能的替代方法时,我如何打开一个弹出窗口。主要问题是我想忽略弹出窗口阻止程序。在一个SO Post

我阅读了以下示例可能会有所帮助:

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();弹出窗口时会打开,但需要启用弹出窗口阻止程序。

4

3 回答 3

3

我认为没有办法绕过弹出窗口阻止程序。

您应该更改方法并尝试在jQuery UI 模式对话框中打开内容,而不是使用实际的浏览器窗口弹出窗口。

于 2012-09-27T16:38:02.633 回答
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加载完成后被调用并弹出一个窗口的唯一可靠方法;所以它冻结了浏览器,太糟糕了。

于 2012-09-28T09:59:18.923 回答
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';
 }
于 2012-09-27T16:59:14.340 回答