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程序設計有所幫助。

相關文章
相關標籤/搜索