唯品秀博客
首页 > 前端开发 > Javascript > 关于js页面window.open跳转新窗口被拦截-解决

关于js页面window.open跳转新窗口被拦截-解决

2018年03月19日 作者:管理员 4231次浏览

window.open为什么被拦截

部分浏览器默认不允许脚本方式去跳转一个新的页面网站,认为这是一种恶意广告行为,但实质所有浏览器都是支持window.open的。在百度搜索好久,有些说可以通过新建a标签,模拟点击事件触发来实现,但是测试发现都实现不了,照样被浏览器拦截(在此严重批评‘CSDN博客’这个垃圾平台,没有几篇有营养的文章,互相复制粘贴也就算了,还自己没验证就互相转),最后找到了一个折中的办法,可以实现新页面打开,但是没有a标签的那种直接流量新页面的效果。

解决办法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <style>
        *{padding:0;margin:0;}
        .btn{width:100px;height:36px;line-height:36px;background: green;border-radius: 4px;display: block;margin:200px auto; font-size:14px;color:#fff;text-align: center;}
   </style>
</head>
<body>
    <a href="javascript:;" class="btn">测试跳转</a>
</body>
<script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
<script>
    $('.btn').click(function(){

         //var newTab=window.open();//打开新窗口
        // console.log(newTab)
         //setTimeout(function(){
           // newTab.location.href="http://www.baidu.com";
       // },2000);

         $.ajax({
            type: 'POST',
            url: 'xxx',
            dataType: "json",
            async:false,//重点,你需要通过同步去执行
            success: function (result) {
               xxx
            }
    })

</script>
</html>

ajax默认异步请求方式不允许open,改成async:false同步即可,当然,在某些时候也许你并不是通过ahax请求呢?

为了解决这个问题,可以模拟链接被按下,然后打开链接。但是在jQuery中,使用a.click(), a.trigger('click')等都不会引起链接默认事件被执行。下面的代码模拟生成了链接点击事件,然后执行默认打开链接的事件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
html>
<head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
    <title>Title</title>

    <script src="jquery.js"></script>
    <script type="text/javascript">
    $(function() {
        $("#btn").click(function() {
            //var a = $('a')[0];
            var a = $("<a href='http://www.apple.com' target='_blank'>Apple</a>").get(0);
           
            var e = document.createEvent('MouseEvents');
            e.initEvent( 'click', true, true );
            a.dispatchEvent(e);
        });
    });
   
    </script>
</head>

<body>
    <input type="button" value="Go to Apple" id="btn">
</body>
</html>
1
2
3
4
5
6
7
8
<script type="text/javascript">
    if (confirm("现在去付款")) {
        var a = $("<a href='http://www.apple.com' target='_blank'>Apple</a>").get(0);
        var e = document.createEvent('MouseEvents');
        e.initEvent('click', true, true);
        a.dispatchEvent(e);
    }
</script>

「两年博客,如果觉得我的文章对您有用,请帮助本站成长」

赞( 5 ) 打赏

谢谢你请我吃鸡腿*^_^*

支付宝
微信
5

谢谢你请我吃鸡腿*^_^*

支付宝
微信

上一篇:

下一篇:

共有 0 条评论 - 关于js页面window.open跳转新窗口被拦截-解决

博客简介

唯品秀博客: weipxiu.com,一个关注Web前端开发技术、关注用户体验、坚持更多原创实战教程的个人网站,愿景:成为宇宙中最具有代表性的前端博客,期待您的参与,了解更多...

精彩评论

友情链接

他们同样是一群网虫,却不是每天泡在网上游走在淘宝和网游之间、刷着本来就快要透支的信用卡。他们或许没有踏出国门一步,但同学却不局限在一国一校,而是遍及全球!

站点统计

  • 文章总数: 180 篇
  • 草稿数目: 2 篇
  • 分类数目: 13 个
  • 页面总数: 21 个
  • 评论总数: 850 条
  • 链接总数: 14 个
  • 标签总数: 357 个
  • 建站时间: 857 天
  • 注册用户: 463 人
  • 访问总量: 8682087 次
  • 最近更新: 2019年4月21日
服务热线:
 173xxxx7240

 QQ在线交流

 旺旺在线