vue解决打开新窗口被拦截的的实战方法

解决方案:

1. 使用a标签替代

给出如下函数,将此函数绑定到click的事件回调中,就可以避免大部分浏览器对窗口弹出的拦截。

 newLink(url) {
     let a = document.createElement(‘a‘);
     a.setAttribute(‘href‘, url);
     a.setAttribute(‘target‘, ‘_blank‘);
  }

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

这种方法需要构造一个from,然后由js代码触发form的submit,将表单提交到一个新的页面,

如果需要传递参数时,需要使用 POST 方法, 默认的 GET 方法无法传递参数。也就是新页面的url中没有参数部分。如:

newLink(url){
    let form = document.createElement('form');
    form.action = 'www.baidu.com?id=1';
    form.target = '_blank';
    form.method = 'POST';
    document.body.appendChild(form);
    form.submit();
}

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

第三种方案,其实是一种变通方案,核心思想是:先通过用户点击打开页面,然后再对页面进行重定向。示例代码如下:

newLink(url){
     // 打开页面,此处最好使用提示页面
    let newLink = window.open(‘loading page‘);
    axios.get(url)
        .then(function (response) {
        newLink.location.href = url;;
    })
        .catch(function (error) {
        console.log(error);
    })
}

参考链接1

参考链接2

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 看别人说余生给自己 我这一生都是给自己的 不去忙乱七八糟的事情 有时间看看电影 啊 好希望自己有一只黑猫 酷酷的黑...
    TheF阅读 117评论 0 0
  • 我得有多慌张 才能剥去一层一层的凡尘 连着鲜艳的血一并褪去 是啊 剥落是千辛万苦的历程 没有了遮挡会更加势不可挡 ...
    许二可阅读 471评论 0 4
  • 科幻小说写作资料 汇总 http://www.jianshu.com/nb/8692577 2017科幻稿、科幻小...
    钟天心阅读 756评论 1 2
  • 最近一直在坚持一件事情,每天会花大约二十多分钟的时间坚持读英语,已经第十五天了。我报了一个坚持100天的训练营,不...
    会敬阅读 284评论 0 0