大部分现代的浏览器(Chrome/Firefox/IE 10+/Safari)都默认开启了阻止弹出窗口的策略,原因是window.open被广告商滥用,严重影响用户的使用。这个阻止弹窗的操作,并不是封杀了window.open(),而是根据用户的行为来判断此次open是否属于流氓操作。
如果是用户出发的动作所引起的window.open(),浏览器不会阻止。但是写在 onclick 这些事件 handler 里的,但如果是代码自己触发的就会被阻止。
那么,在safire中无法打开open新窗口,是因为safire的安全机制将其阻挡。只要不是用户发起的操作的都会被阻止。
解决方法:
1,window.location.replace() 但是不能打开新窗口
2,回调函数中生成一个链接,让用户点击一下
3,在回调函数之前加一个新窗口,然后再回调函数中设置他的location
var winRef = window.open('','_blank');
this.$axios
.post("url", {
resource_id: resource_id,
})
.then((res) => {
if (res.code == 200) {
winRef.location = res.data.playbackUrl;
}
});
本文探讨了现代浏览器如Safari如何通过安全机制阻止自动弹出新窗口的问题,提供了解决方案,包括使用window.location.replace,生成链接引导用户手动点击,以及预开窗口并后续设置其location。
199

被折叠的 条评论
为什么被折叠?



