safari 浏览器兼容window.open失效?

1,357 阅读1分钟

safari浏览器 window.open() 方法不生效?

1. 背景

其实在Safari浏览器中,正常使用window.open()方法是没问题的,只不过是在回调函数中使用window.open就会不生效。

那为什么不生效?

因为Safari浏览器做了一些安全保障机制,禁止在回调函数中执行window.open函数!说白了就是为了阻止页面疯狂弹出各种广告用的。

2. 不生效的场景举例

axios.get('xxxxxx').then((url) => { window.open(url, '_blank'); });

3. 解决方案

1. 若还是不想在当前页面打开

可以使用以下逻辑,在回调函数中增加弹出弹框提示用户的逻辑,在弹框中显示需要跳转页面的链接,用户手动点击后就可以跳转。

例如:弹出,“页面没有正常打开?点击以下链接进行跳转(链接就是我们回调函数中想要跳转的界面)”。

2. 若不需重新打开页面可以使用
window.location.href = url
3. 另一种踩过坑的解决方案

这种情况会有隐藏问题,不推荐使用。当用户自己设置允许弹框弹出时,会打开空白页面!!!

// 必须提前声明新创建的window对象
let newWindow = window.open('', '_blank'); 
axios.get('xxxxxx').then((url) => { newWindow.location = url; });