Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 防止浏览器中出现窗口弹出警告_Javascript_Html_Jsp - Fatal编程技术网

Javascript 防止浏览器中出现窗口弹出警告

Javascript 防止浏览器中出现窗口弹出警告,javascript,html,jsp,Javascript,Html,Jsp,我正在尝试在新窗口中打开jsp页面。使用javascriptwindow.openyeilds浏览器警告,在某些情况下(firefox)默认会阻止弹出窗口。有没有办法解决这个问题(这不是恶意应用程序-它是一个内部用户工具)?如果弹出窗口是由用户操作(如单击按钮)触发的,大多数浏览器不会阻止它。例如,如果您的window.openjavascript附加到按钮的onclick事件,浏览器将不会阻止它 另一方面,如果您试图在没有任何用户操作的情况下显示弹出窗口,那么您就没有运气了。这正是恼人广告使用

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

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


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

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


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

我将在这里分享我的解决方案,因为我发现没有提供任何解决方案

第一件事

当弹出窗口打开时,每个浏览器都有一个可接受的时间限制,在该时间限制之后,它将删除“信任”,假设现在它不在用户操作范围内,并阻止弹出窗口。这一时间限制因浏览器而异,例如,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);
     }
});
当然,你需要根据你的需要调整它,但我希望它能帮助你朝着正确的方向前进

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


我希望它能有所帮助

我将在这里分享我的解决方案,因为我发现没有提供任何解决方案

第一件事

当弹出窗口打开时,每个浏览器都有一个可接受的时间限制,在该时间限制之后,它将删除“信任”,假设现在它不在用户操作范围内,并阻止弹出窗口。这一时间限制因浏览器而异,例如,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);
     }
});
当然,你需要根据你的需要调整它,但我希望它能帮助你朝着正确的方向前进

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


我希望它能有所帮助

为什么它需要放在一个新窗口中?通过
window.open()
而不是例如
target=“\u blank”
打开它背后的功能要求是什么?根据您的问题历史记录,您正在使用jQuery,您是否也使用jQuery UI?如果它是一个内部工具,请您的用户将其列为白名单。我正在使用jQuery和jQuery UI。它只需要在一个新窗口中(不管它是否是最好的选择)。为什么它需要在一个新窗口中?通过
window.open()
而不是例如
target=“\u blank”
打开它背后的功能要求是什么?根据您的问题历史记录,您正在使用jQuery,您是否也使用jQuery UI?如果它是一个内部工具,请您的用户将其列为白名单。我正在使用jQuery和jQuery UI。它只需要在一个新窗口中(不管它是否是最好的选择)。不幸的是,要求是后者(没有用户操作)@john如果它只是需要某种对话框,而不一定是一个“真正的”弹出窗口,也许你可以使用jQuery对话框b