浏览器拦截js弹出框


示例一

点击button触发click事件,click函数发送ajax请求获取数据,成功之后打开新窗口. 结果发现浏览器拦截了新窗口.

$("#btn").click(function(e){
    $.getJSON("/data.json", function(rp){
        window.open("http://www.baidu.com");
        /*
        var shtml =
            '<form action="/" target="_blank" style="display:none;"> '+
            '<button type="submit" value="submit">submit</button> '+
            '</form> ';
        shtml = $(shtml);
        $("body").append(shtml);
        shtml.submit()
        */
    });
});
</script>
<html>
  • 示例二
    用jquery.pubsub.js发布/订阅消息新开窗口. 不会被阻止
<script src="/jquery.pubsub.js" type="text/javascript"></script>
$(function(){
    $("#btn").click(function(e){
        $.publish("msg");
    });
    $.subscribe("msg", function(param){
        window.open("http://www.baidu.com");
    })
})
  • 示例三
    将打开行为放在click()里,发现浏览器没有组织新窗口
<script src="/jquery.pubsub.js" type="text/javascript"></script>
$(function(){
    $("#btn").click(function(e){
        window.open("http://www.baidu.com");
    });
})

用户行为浏览器不会阻止,js调用触发的行为浏览器会阻止.



上篇: $('a').click()无法触发页面跳转 下篇: top命令查看单个进程