JavaScript中window.open被浏览器拦截的解决方案汇总

作者:页面旅途时间:2026-10-28 15:27:49浏览:99

本文汇总了JavaScript中window.open在AJAX请求后打开新页面时被浏览器拦截的解决方法。通过模拟点击、延迟跳转及showModalDialog等技巧,提供多种绕过浏览器安全限制的实现代码,帮助开发者在异步请求后成功打开新标签页。

JavaScript中window.open被浏览器拦截的解决方案汇总

本文详细介绍了解决JavaScript中window.open被浏览器拦截问题的多种方法,供开发者参考。

一、问题背景

在处理页面AJAX请求时,若需在请求完成后打开新页面,通常尝试使用js window.open来实现,但此类操作往往会被现代浏览器安全机制拦截。

二、问题分析

经搜索发现,有观点建议通过新建a标签并模拟点击来绕过限制,但实际测试表明该方法依然会被浏览器拦截。最终找到一种折中方案,虽无法实现a标签那种直接跳转流量的效果,但能确保新页面正常打开。

三、实现代码

核心逻辑如下:

$obj.click(function(){
var newTab=window.open('about:blank');
$.ajax({
success:function(data){
if(data){
//window.open('https://www.jb51.net');
newTab.location.href="https://www.jb51.net";
   }
  }
 })
})

其他可行方法:

代码如下:

<script type="text/javascript">
<!-- 
$( 
function() {
{
//方法一
window.showModalDialog("https://www.jb51.net/");
window.showModalDialog("https://www.jb51.net/");
 
//方法二
var aa=window.open();
setTimeout(function(){
aa.location="https://www.jb51.net";
}, 100);
var b=window.open();
setTimeout(function(){
b.location="https://www.jb51.net";
}, 200);
var c=window.open();
setTimeout(function(){
c.location="https://www.jb51.net";
}, 300);
var d=window.open();
setTimeout(function(){
d.location="https://www.jb51.net";
}, 400);
var ee=window.open();
setTimeout(function(){
ee.location="https://www.jb51.net";
}, 500);
var f=window.open();
setTimeout(function(){
f.location="https://www.jb51.net";
}, 600);
var g=window.open();
setTimeout(function(){
g.location="https://www.jb51.net";
}, 700);
var h=window.open();
setTimeout(function(){
h.location="https://www.jb51.net";
}, 800);
var i=window.open();
setTimeout(function(){
i.location="https://www.jb51.net";
}, 900);
var j=window.open();
setTimeout(function(){
j.location="https://www.jb51.net";
}, 1000);
//方法三
var a = $("<a href='https://www.jb51.net' target='_blank'>Apple</a>").get(0);
var e = document.createEvent('MouseEvents');
e.initEvent( 'click', true, true );
a.dispatchEvent(e);
var a = $("<a href='https://www.jb51.net' target='_blank'>Apple</a>").get(0);
var e = document.createEvent('MouseEvents');
e.initEvent( 'click', true, true );
a.dispatchEvent(e);
} 
 
);
//-->
</script>

希望上述基于javascript的web程序设计技巧能对大家有所帮助。

作者最新文章

相关标签: