如何解决浏览器弹出窗口的拦截

问题

有时候在开发业务时,因为产品体验,要求自动打开新窗口,而不但愿用户手动点击。
直接在代码中执行:javascript

window.open('http://www.baidu.com')html

是会被浏览器拦截的,浏览器是默认屏蔽弹出窗口,可是是用户手动触发,就不会拦截,若是是程序自动执行,则会拦截。java

解决

那么根据上述规则,那就在用户有点击动做时打开这个窗口,伪代码以下:ajax

<a href="javascript:;" id="blank">test</a>
 document.getElementById('blank').onclick=function(){
    window.open(...)
 }

示例在此编程

不过,这方式在异步编程中仍是会被拦截,因此在用户点击发送请求的同时打开一个新窗口,而后在回调函数中修改新窗口的地址,伪代码以下:浏览器

<a href="javascript:;" id="blank">test</a>
 document.getElementById('blank').onclick=function(){
    const newwin = window.open('about:blank');
    $.ajax({
       type: 'post',
       url: 'xxxx',
       data: {...},
    }).then((data)=>{
      ...
      newwin.location.href = data.href; // 调用location
    })
相关文章
相关标签/搜索