瀏覽器被攔截解決辦法參考


相信做web前端或者使用JS的朋友都會遇到需要在新窗口打開頁面的情況,現在瀏覽器大都具有彈出窗口攔截功能,所以傳統的window.open()不再那么好用了。借鑒於網上查到的方法和我個人的實踐,把彈出新窗口的方法給大伙都介紹一下。

第一種、使用原生javascript的window.open()方法(大部分情況下會被瀏覽自阻止)

第二種、模擬表單(form)提交,原理是指定表單的action為想要打開的URL地址,target設置為"_blank"

不過模擬表單提交的方法經很多網友反映說也會被阻止

第三種、模擬超鏈接(<a>)被點擊,用jquery的寫法如下,注意最后openLink[0]是模擬的原生DOM對象被點擊的(使用Jquery對象的話沒反應)

var openLink = $("");
openLink.attr('href', 'URL地址');
openLink[0].click();

這種方法個人比較推薦的,因為簡單方便

第四種、利用瀏覽器的冒泡事件(這種方法稍微有點復雜,呵呵)

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的原始點擊事件,就完成了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM