我正在尝试在新窗口中打开jsp页面。使用javascript window.open
yeilds浏览器警告,在某些情况下(firefox)将默认阻止弹出窗口。有没有办法(这不是恶意应用程序 - 它是一个内部用户工具)?
答案 0 :(得分:10)
如果用户操作(例如单击按钮)触发弹出窗口,则大多数浏览器都不会阻止弹出窗口。例如,如果您的window.open
javascript附加到按钮的onclick
事件,则浏览器不会阻止它。
另一方面,如果您尝试在没有任何用户操作的情况下显示弹出,那么您运气不佳。这正是令人讨厌的广告使用的技术,因此浏览器无法区分您的应用与烦人的广告。
答案 1 :(得分:0)
我将在这里分享我的解决方案,因为我没有提供。
第一件事
打开弹出窗口时,每个浏览器都有一个可接受的时间限制,在此之后,它会删除“信任”,前提是现在它不在用户操作范围内并阻止弹出窗口。此时间限制因浏览器而异,例如chrome为3秒,firefox为2秒。
如何阻止浏览器阻止弹出窗口
首先,您需要确保对某些用户操作打开弹出窗口仅。
但是,不可能总是这样。例如,每次用户单击“打印发票”时,我需要打开一个弹出窗口以加载发票的pdf。当用户单击按钮时,我没有pdf,我需要执行以下操作:
现在,以上过程始终需要花费可变的时间,具体取决于pdf的复杂程度和客户的互联网速度。
我遇到了这个问题,浏览器阻止了我的弹出窗口。
因此,一个简单的解决方案是:
以下几行代码可帮助您实际实现上述要点:
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的弹出窗口的有用信息解决了我的问题
我希望对您有帮助