在浏览器中阻止窗口弹出警告

时间:2011-04-27 21:11:05

标签: javascript html jsp

我正在尝试在新窗口中打开jsp页面。使用javascript window.open yeilds浏览器警告,在某些情况下(firefox)将默认阻止弹出窗口。有没有办法(这不是恶意应用程序 - 它是一个内部用户工具)?

2 个答案:

答案 0 :(得分:10)

如果用户操作(例如单击按钮)触发弹出窗口,则大多数浏览器都不会阻止弹出窗口。例如,如果您的window.open javascript附加到按钮的onclick事件,则浏览器不会阻止它。

另一方面,如果您尝试在没有任何用户操作的情况下显示弹出,那么您运气不佳。这正是令人讨厌的广告使用的技术,因此浏览器无法区分您的应用与烦人的广告。

答案 1 :(得分:0)

我将在这里分享我的解决方案,因为我没有提供。

第一件事

打开弹出窗口时,每个浏览器都有一个可接受的时间限制,在此之后,它会删除“信任”,前提是现在它不在用户操作范围内并阻止弹出窗口。此时间限制因浏览器而异,例如chrome为3秒,firefox为2秒。

如何阻止浏览器阻止弹出窗口

首先,您需要确保对某些用户操作打开弹出窗口

但是,不可能总是这样。例如,每次用户单击“打印发票”时,我需要打开一个弹出窗口以加载发票的pdf。当用户单击按钮时,我没有pdf,我需要执行以下操作:

  • 提出ajax请求
  • 在服务器上生成pdf
  • 发回一条公共可访问路径,我将其加载到弹出窗口中以在浏览器中显示pdf

现在,以上过程始终需要花费可变的时间,具体取决于pdf的复杂程度和客户的互联网速度。

我遇到了这个问题,浏览器阻止了我的弹出窗口。

因此,一个简单的解决方案是:

  • 用户单击按钮时立即打开弹出窗口
  • 将焦点切换到该弹出窗口
  • 然后发出ajax请求并从服务器获取加载路径或所需的任何内容。
  • 根据服务器响应将URL加载到您需要的弹出窗口或修改中。

以下几行代码可帮助您实际实现上述要点:

let newWindow = open('/', 'example', 'width=300,height=300')
 newWindow.focus();
 let data = {
     //whatever data you need to provide
  };
  //send ajax
  $.ajax({
     type: "POST",
     url: yourUrl,
     headers: { 
       //if you use XCSRF or add any other header you might have
       'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
     },
     data: data,
     success: function( response ) {
         //load the returned content in new window
         //or whatever else you need to do
         newWindow.location.href = response.path;
     },
     error: function(XMLHttpRequest, textStatus, errorThrown) {
          console.log(XMLHttpRequest, textStatus, errorThrown);
     }
});

当然,您需要根据需要进行调整,但我希望它能帮助您正确地进行指导。

我已根据有关here的弹出窗口的有用信息解决了我的问题

我希望对您有帮助