JS打開新窗口防止被瀏覽器阻止的方法
本文實(shí)例講述了JS打開新窗口防止被瀏覽器阻止的方法。分享給大家供大家參考。具體分析如下:
用傳統(tǒng)的window.open()方式打開新窗口,會(huì)被瀏覽器阻止,那么,我們?nèi)绾尾拍茏孞S打開新窗口不被瀏覽器阻止呢?其實(shí)辦法還是有的,這里我們就來分析一下如何解決這個(gè)問題
我最近也遇到了這樣的問題,所以就把彈出新窗口的方法分享給大家。歡迎大家補(bǔ)充哦...
第一種、使用原生javascript的window.open()方法(大部分情況下會(huì)被瀏覽自阻止)
第二種、模擬表單(form)提交,原理是指定表單的action為想要打開的URL地址,target設(shè)置為"_blank"
var s=document.getElementById("hiddenlink");
s.submit();
不過模擬表單提交的方法經(jīng)有可能也會(huì)被阻止...
第三種、模擬超鏈接(<a>)被點(diǎn)擊
當(dāng)按下一個(gè)按鈕時(shí),想打開一個(gè)新的標(biāo)簽頁,可以模擬鏈接被按下,然后打開鏈接。
但是在jQuery中,使用a.click(), a.trigger('click')等都不會(huì)引起鏈接默認(rèn)事件被執(zhí)行。
下面的代碼模擬生成了鏈接點(diǎn)擊事件,然后執(zhí)行默認(rèn)打開鏈接的事件。
不過值得注意的一點(diǎn)是:對應(yīng)IE瀏覽器,只有IE9以上才支持document.createEvent函數(shù),所以以下代碼在IE執(zhí)行的話要IE9以上才行
var e = document.createEvent('MouseEvents');
e.initEvent('click', true, true);
a.dispatchEvent(e);
第四種、利用瀏覽器的冒泡事件(轉(zhuǎn)載來的)
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). 首先,說一下最終的效果,是實(shí)現(xiàn)用 “A” 包含你要觸發(fā)彈窗的元素,原來的click事件要返回彈窗的URL 對應(yīng)這一句:
2). 然后就要說到彈窗攔截的策略了,具體我就不說了,反正 策略里是不會(huì)攔截 “A” 本身吧
3). 最后就是合成了,用A包含后,因?yàn)槭录?huì)冒泡,所以利用正常的點(diǎn)擊,生成動(dòng)態(tài)的 鏈接地址 給A,觸發(fā)A的原始點(diǎn)擊事件,就完成了。
希望本文所述對大家的javascript程序設(shè)計(jì)有所幫助。
- JS打開新窗口的2種方式
- js打開新窗口方法整理
- javascript打開新窗口同時(shí)關(guān)閉舊窗口
- 打開新窗口關(guān)閉當(dāng)前頁面不彈出關(guān)閉提示js代碼
- Flex調(diào)Javascript打開新窗口示例代碼
- JS關(guān)閉窗口與JS關(guān)閉頁面的幾種方法小結(jié)
- JavaScript無提示關(guān)閉窗口(兼容IE/Firefox/Chrome)
- IE JS無提示關(guān)閉窗口不提示的方法
- JavaScript實(shí)現(xiàn)自動(dòng)彈出窗口并自動(dòng)關(guān)閉窗口的方法
- JS關(guān)閉窗口或JS關(guān)閉頁面的幾種代碼分享
- JS關(guān)閉窗口時(shí)產(chǎn)生的事件及用法示例
- JavaScript實(shí)現(xiàn)單擊網(wǎng)頁任意位置打開新窗口與關(guān)閉窗口的方法
相關(guān)文章
7道關(guān)于JS this的面試題,你能答對幾個(gè)
這篇文章主要給大家介紹了7道關(guān)于JS this的面試題,來看看你能答對幾個(gè),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03js實(shí)現(xiàn)提交前對列表數(shù)據(jù)的增刪改查
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)提交前對列表數(shù)據(jù)的增刪改查,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-01-01JS定時(shí)檢測任務(wù)任務(wù)完成后執(zhí)行下一步的解決辦法
這篇文章主要介紹了JS定時(shí)檢測任務(wù)任務(wù)完成后執(zhí)行下一步的解決辦法,需要的朋友可以參考下2016-12-12js實(shí)現(xiàn)ArrayList功能附實(shí)例代碼
ArrayList功能想必大家都有所了解吧,本文使用js實(shí)現(xiàn)ArrayList功能并附實(shí)例代碼,想學(xué)習(xí)的朋友可以看看2014-10-10JavaScript使用?for...in?、?for...of?或者?forEach()?遍歷元素的示例
for...in?、?for...of?和?forEach?都是用于循環(huán)遍歷集合元素的方法,但它們之間有一些重要的區(qū)別,本文通過實(shí)例代碼介紹JavaScript使用?for...in?、?for...of?或者?forEach()?遍歷元素的相關(guān)知識(shí),感興趣的朋友一起看看吧2023-09-09