在苹果系统Safari浏览器中,由于安全机制的原因,无法在JS的回调函数中使用 window.open() 方法。但如果我们要强制使用 window.open() 该如何做呢?下面就说一下绕过此安全机制的方法。

解决 window.open 在 Safari苹果浏览器无法打开的的问题

1、绕过Safari苹果浏览器的安全机制

绕过Safari苹果浏览器的安全机制其实很简单,在调用ajax请求之前,通过 window.open 打开窗口, 然后在回调函数里面修改打开窗口的 location 为目地址即可!

例:

<script>
winOpen = window.open("", "_blank"); //提前打开一个窗口
$.ajax({
type:'POST',
url: '',
data: {},
dataType:'json',
success:function(res){
setTimeout(function() {  
winOpen.location = 'http://feiniaomy.com'; //修改为要打开的地址
}, 1000);
},
error:function(){ }
});
</script>

注意:ajax 回调函数中,需要将修改 location 地址的代码放到 setTimeout 方法中,并延时 1000 毫秒左右。这样可以防止window.open会中断正在执行的进程

2、让用户点击的方法

此方法比上面的方法多出了一个步骤,只需要在回调的函数中将链接写入到页面中,让用户点击即可,这个方法是百分之百不会被拦截的!

例:

<a href="" id="mochu">这是一个链接</a>
<script>
$.ajax({
type:'POST',
url: '',
data: {},
dataType:'json',
success:function(res){
$('#mochu').attr('href',res.url);
},
error:function(){ }
});
</script>