在没有弹出窗口拦截器的情况下从网站打开Popup

时间:2012-09-27 16:34:26

标签: jquery popup-blocker

我有一个奇怪的查询,我想打开一个新窗口(弹出窗口),当使用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();时弹出窗口打开,但需要启用弹出窗口阻止程序。

3 个答案:

答案 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';
 }