window.open()拦截

背景是遇到需要实现选择不同的选项后跳转页面,有一些是跳的外链,所以需要在新的选项卡打开。

Location可以实现跳转是没问题的,但是实现不了新窗口打开。

原来记得window是可以,但是是被大部分浏览器阻止的。查了下看看。

发现浏览器阻止window.open是有条件的。


大部分现代的浏览器(泛指 Chrome / Firefox / IE 10+ / Safari)都默认开启了阻止弹出窗口的策略,原因是 window.open 被广告商滥用,严重影响用户的使用。这个阻止弹出窗口的操作,并不是直接封杀 windw.open(),而是会根据用户的行为来判断这次 window.open() 是否属于流氓操作。

如果是由用户触发的动作所引起的 window.open 就不会被浏览器所阻止,比如写在 onclick 这些事件 handler 里的,但如果是代码自己触发的就被阻止。


但是如果window.open是在ajax请求完成后的方法里,也会被阻止。也有人试验了哪怕用户点击了加上一定的延迟也是会被拦截的。

本人也试验加了2000ms的延迟的时候确实被拦截了,1000ms的没有拦截。

所以尽量在新窗口打开的时候不要再异步操作里实现吧

window.open()被部分浏览器拦截问题

viewProfile() {

        if (this.personalProfile) {

            setTimeout(function(){

                window.open('https://my.******.com/group/profile', '_blank');

            },  2000)

        } else {

            this.router.navigate(['/profile']);

        }

    }

你可能感兴趣的:(window.open()拦截)