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; });