为什么在 Ajax 回调函数里新建的窗口会被 Chrome 浏览器拦截

如题所述

因为浏览器的安全策略。

很多浏览器会有一套判断机制,来防止有恶意代码执行一些可能会对用户产生影响的内容。
新建窗口就是这一类。试想一下如果JS可以完全不受限制的创建窗口的话,你打开一个比较流氓的页面,它可以不停的自动弹出窗口,就像病毒一样。

浏览器判断是不是可以弹出窗口其中有一个策略就是判断这个操作是不是用户主动触发的。比如你点一个按钮,按钮的onclick时间里面执行创建了一个新窗口,浏览器判断出点按钮这件事是用户主动触发,所以这个窗口可以弹出来。

简单的说,应该就是由用户主动触发的一个线程中的操作,不会被屏蔽(我的理解,并没有考证,而且不同浏览器可能策略不一样)

如果按钮的onclick时间里面有一个异步请求,在回调中打开新窗口,因为这个操作并不是在用户点击触发的执行线程里,所以被拦截了。

解决方法之一就是把请求改成同步的,应该就不会被拦截。
温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网