JS打开新窗口防止被浏览器阻止的方法[转]

本文实例讲述了JS打开新窗口防止被浏览器阻止的方法。分享给你们供你们参考。具体分析以下:javascript

用传统的window.open()方式打开新窗口,会被浏览器阻止,那么,咱们如何才能让JS打开新窗口不被浏览器阻止呢?其实办法仍是有的,这里咱们就来分析一下如何解决这个问题java

我最近也遇到了这样的问题,因此就把弹出新窗口的方法分享给你们。欢迎你们补充哦...浏览器

第一种、使用原生javascript的window.open()方法(大部分状况下会被浏览自阻止)app

第二种、模拟表单(form)提交,原理是指定表单的action为想要打开的URL地址,target设置为"_blank"函数

代码以下:
document.getElementById("msgTxt").innerHTML="<form id='hiddenlink' action='"+sHref+"' target='_blank'><input type='hidden' name='object'   value='"+objValue+"'></form>";
var s=document.getElementById("hiddenlink");
s.submit();

 

不过模拟表单提交的方法经有可能也会被阻止...this

第三种、模拟超连接(<a>)被点击spa

当按下一个按钮时,想打开一个新的标签页,能够模拟连接被按下,而后打开连接。
可是在jQuery中,使用a.click(), a.trigger('click')等都不会引发连接默认事件被执行。
下面的代码模拟生成了连接点击事件,而后执行默认打开连接的事件。设计

不过值得注意的一点是:对应IE浏览器,只有IE9以上才支持document.createEvent函数,因此如下代码在IE执行的话要IE9以上才行code

代码以下:
var a = $("<a href='http://www.test.com' target='_blank' >test</a>").get(0);
 var e = document.createEvent('MouseEvents');
 e.initEvent('click', true, true);
 a.dispatchEvent(e);

 


第四种、利用浏览器的冒泡事件(转载来的)orm

代码以下:
clickOpenWin: function(f){
    var dataKey = "clickOpenWin.dataKey"
    var me = $(this);
    var A = me.data(dataKey);
    var returnData = null;
    if(!A){
        A = $("");
        me.data(dataKey, A);
        A.click(function(e){
            if(returnData){
                A.attr("href", returnData);
            }else {
                A.before(me);
                e.stop();
            }
        });
    }
    me.mouseover(function(){$(this).before(A).appendTo(A);});
    me.mouseout(function(){A.before($(this));});
    me.click(function(){
        A.attr("href", "#|");
        returnData = f.apply(this, arguments);
    });
}

 

1). 首先,说一下最终的效果,是实现用 “A” 包含你要触发弹窗的元素,原来的click事件要返回弹窗的URL 对应这一句:

代码以下:
returnData = f.apply(this, arguments);


2). 而后就要说到弹窗拦截的策略了,具体我就不说了,反正 策略里是不会拦截 “A” 自己吧
3). 最后就是合成了,用A包含后,由于事件会冒泡,因此利用正常的点击,生成动态的 连接地址 给A,触发A的原始点击事件,就完成了。

 

但愿本文所述对你们的javascript程序设计有所帮助。

相关文章
相关标签/搜索