当window.open为用户触发事件内部或者加载时,不会被拦截,一旦将弹出代码移动到ajax或者一段异步代码内部,马上就出现被拦截的表现了

原因分析

当浏览器检测到非用户操作产生的新弹出窗口,则会对其进行阻止。因为浏览器认为这不是一个用户希望看到的页面。

  1. // 直接打开页面
  2. window.open(‘//www.baidu.com‘, ‘_blank‘);

可是当我们模拟用户点击的时候,浏览器的拦截机制就不会触发

解决办法

  1. function windowOpen(url, id) {
  2. var a = document.createElement(‘a‘);
  3. a.setAttribute(‘href‘, url);
  4. a.setAttribute(‘target‘, _blank‘);
  5. a.setAttribute(‘id‘, id);
  6. // 防止反复添加
  7. if(!document.getElementById(id)) {
  8. document.body.appendChild(a);
  9. }
  10. a.click();
  11. }

使用form的submit方法打开一个页面

终极解决方案–先弹出窗口,然后重定向