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

joh*_*ohn 1 html javascript jsp

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

kij*_*jin 10

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

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

  • @john如果它只是需要某种对话框而不一定是"真正的"弹出窗口,也许你可以使用这样的jQuery对话框:http://jqueryui.com/demos/dialog/ (2认同)

Lea*_*ner 5

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

第一件事

当弹出窗口打开时,每个浏览器都有一个可接受的时间限制,在此之后它会删除“信任”,假设现在它不在用户操作范围内并阻止弹出窗口。此时间限制因浏览器而异,例如 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);
     }
});
Run Code Online (Sandbox Code Playgroud)

当然,您需要根据需要对其进行调整,但我希望它可以帮助您找到正确的方向。

我已经根据此处提供的有关弹出窗口的有用信息解决了我的问题

我希望它有帮助