防止浏览器弹出窗口警告

Prevent window popup warning in browser

本文关键字:窗口 警告 浏览器      更新时间:2023-09-26

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

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

另一方面,如果您试图在没有任何用户操作的情况下显示弹出窗口,那么您就不走运了。这正是烦人的广告所使用的技术,所以浏览器无法区分你的应用和烦人的广告。

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

重要的是

当弹出窗口打开时,每个浏览器都有一个可接受的时间限制,超过这个时间限制,它会删除"信任",假设现在它在用户操作之外并阻止弹出窗口。此时间限制因浏览器而异,例如chrome为3秒,而firefox为2秒。

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

首先,您需要确保在某些用户操作时打开一个ONLY弹出窗口。

然而,这并不总是可能的。例如,每次用户点击"打印发票"时,我都需要打开一个弹出窗口来加载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);
     }
});

当然,你需要根据你的需要来调整它,但我希望它能帮助你朝着正确的方向前进。

我已经解决了我的问题基于有用的信息弹出提供这里

希望对大家有所帮助