先分析一下浏览器为什么会阻止window.open吧:
用户主动去触发事件的浏览器不会阻止,什么是用户主动触发的呢?就是当用户去点击的一瞬间就弹出这种浏览器是不会阻止的,如果是通过setTimeout定时器延时弹出或者ajax异步处理回调后在open这种浏览器就会认为是恶意弹出就会立刻阻止。
解决办法:
利用之前的重大发现应该这样处理这类问题,当用户点击的时候如果需要在异步ajax回调后open的话应该把代码改成下面这种
function test(){ $.ajax({ url:'a.html', success: function(e){ window.open(url)//被浏览器KO了 } }) }
function test(){ var winpop=window.open('','pop'); winpop.document.write('先占个座,去去就来!') $.ajax({ url:'a.html', success: function(url){ window.open(url,'pop')//成功弹出! } }) }