摘要:使用包裝一下,也可以防止被瀏覽器攔截。注意這里的超時(shí)時(shí)間不能太短,否則也會(huì)被攔截。我們會(huì)遇到想要彈出一個(gè)窗口,可是卻是在事件執(zhí)行后,才去彈出來(lái)的,這時(shí)就會(huì)被瀏覽器攔截,我們可以通過(guò)下面的方法來(lái)避免先用打開(kāi)一個(gè)窗口,然后修改地址。
最近公司開(kāi)發(fā)的一個(gè)項(xiàng)目,平凡用到下載各種類(lèi)型的文件,但是例如.txt,.jpg,.pdf格式的文件呢瀏覽器會(huì)在當(dāng)前窗口直接打開(kāi),影響用戶(hù)體驗(yàn),嘗試各種方案和百度總結(jié)一下幾點(diǎn);
原理: 當(dāng)window.open為用戶(hù)觸發(fā)事件內(nèi)部或者加載時(shí),不會(huì)被攔截,一旦將彈出代碼移動(dòng)到ajax或者一段異步代碼內(nèi)部,馬上就出現(xiàn)被攔截的表現(xiàn)了(瀏覽器認(rèn)為這可能是一個(gè)廣告,不是一個(gè)用戶(hù)希望看到的頁(yè)面) 常用辦法頁(yè)面打開(kāi)方式:超鏈接Welcome
等效于js代碼
window.location.; //在同當(dāng)前窗口中打開(kāi)窗口
超鏈接Welcome
等效于js代碼
window.open("https://www.baidu.com/"); //在另外新建窗口中打開(kāi)窗口
關(guān)閉新窗口:this.window.opener =null; window.close();
解決方案:使用a標(biāo)簽替代:
給出如下函數(shù),將此函數(shù)綁定到click的事件回調(diào)中,就可以避免大部分瀏覽器對(duì)窗口彈出 的攔截:
function newWin(url, id) { var a = document.createElement(‘a(chǎn)‘); a.setAttribute(‘href‘, url); a.setAttribute(‘target‘, ‘_blank‘); a.setAttribute(‘id‘, id); // 防止反復(fù)添加 if(!document.getElementById(id)) { document.body.appendChild(a); } a.click(); } function openUrl(url) { var a = $("")[0]; var e = document.createEvent("MouseEvents"); e.initEvent("click", true, true); a.dispatchEvent(e); } //調(diào)用方法newWin(url,"bbb") / openUrl(url) //原理都是通過(guò)創(chuàng)建一個(gè)a標(biāo)簽對(duì)象,通過(guò)里面自帶的target執(zhí)行跳轉(zhuǎn)
在超鏈接里加入onclick事件,如:
//這樣用戶(hù)點(diǎn)擊這個(gè)超鏈接,瀏覽器會(huì)認(rèn)為它是打開(kāi)一個(gè)新的鏈接,所以就不會(huì)攔 截。
使用 setTimeout 包裝一下,也可以防止被瀏覽器攔截。
//注意這里的超時(shí)時(shí)間不能太短,否則也會(huì)被攔截。
setTimeout("window.open(url);", 500);
我們會(huì)遇到想要彈出一個(gè)窗口,可是卻是在onckick事件執(zhí)行后,才去彈出來(lái)的,這時(shí)就會(huì)被瀏覽器攔截,我們可以通過(guò)下面的方法來(lái)避免
//先用window.open打開(kāi)一個(gè)窗口,然后修改地址。如:
var tempwindow=window.open("_blank");呵呵噠,你以為這樣就完事了?大錯(cuò)特錯(cuò)了,以上辦法也就是在已聲明url下有效,如果異步ajax請(qǐng)求獲取下載路徑呢?
解決1:
click: () => { var tempwindow=window.open();//先打開(kāi)臨時(shí)窗體,由于是點(diǎn)擊事件內(nèi)觸發(fā),不會(huì)被攔截 this.$http.get(url+id, {emulateJSON: true} ).then(response => { let resd = response.data; if(resd.code==0){ tempwindow.location.href = resd.result//當(dāng)回調(diào)的時(shí)候更改臨時(shí)窗體的路徑 } else{ tempwindow.close()//回調(diào)發(fā)現(xiàn)無(wú)需打開(kāi)窗體時(shí)可以關(guān)閉之前的臨時(shí)窗體 this.$Message.error(resd.message) } }, response => { tempwindow.close()//回調(diào)發(fā)現(xiàn)無(wú)需打開(kāi)窗體時(shí)可以關(guān)閉之前的臨時(shí)窗體 console.log("error:", response) //for debug }); }
解決2:
click: () => { var flag = false; $.ajax({ "url": url+id, "type": "post", "dataType": "json", "data": data, "async":false,//同步請(qǐng)求 success: function (data) { $("#a").attr("href","www.baidu.com");//當(dāng)回調(diào)的時(shí)候更改頁(yè)面上或創(chuàng)建的某個(gè)a標(biāo)簽的href flag = true;//更改標(biāo)志 }, error:function(){ } }); if(flag){ $("#a")[0].click();//href屬性更改后模擬點(diǎn)擊 } }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/116753.html
摘要:使用包裝一下,也可以防止被瀏覽器攔截。注意這里的超時(shí)時(shí)間不能太短,否則也會(huì)被攔截。我們會(huì)遇到想要彈出一個(gè)窗口,可是卻是在事件執(zhí)行后,才去彈出來(lái)的,這時(shí)就會(huì)被瀏覽器攔截,我們可以通過(guò)下面的方法來(lái)避免先用打開(kāi)一個(gè)窗口,然后修改地址。 最近公司開(kāi)發(fā)的一個(gè)項(xiàng)目,平凡用到下載各種類(lèi)型的文件,但是例如.txt,.jpg,.pdf格式的文件呢瀏覽器會(huì)在當(dāng)前窗口直接打開(kāi),影響用戶(hù)體驗(yàn),嘗試各種方案和百...
摘要:使用包裝一下,也可以防止被瀏覽器攔截。注意這里的超時(shí)時(shí)間不能太短,否則也會(huì)被攔截。我們會(huì)遇到想要彈出一個(gè)窗口,可是卻是在事件執(zhí)行后,才去彈出來(lái)的,這時(shí)就會(huì)被瀏覽器攔截,我們可以通過(guò)下面的方法來(lái)避免先用打開(kāi)一個(gè)窗口,然后修改地址。 最近公司開(kāi)發(fā)的一個(gè)項(xiàng)目,平凡用到下載各種類(lèi)型的文件,但是例如.txt,.jpg,.pdf格式的文件呢瀏覽器會(huì)在當(dāng)前窗口直接打開(kāi),影響用戶(hù)體驗(yàn),嘗試各種方案和百...
摘要:之前的項(xiàng)目,有個(gè)功能是下載文件,這里只要在瀏覽器輸入就會(huì)下載那個(gè)文件了。 之前的項(xiàng)目,有個(gè)功能是下載文件,這里只要在瀏覽器輸入 url 就會(huì)下載那個(gè)文件了。當(dāng)時(shí)我只是簡(jiǎn)單得使用 window.open ,但是卻會(huì)被瀏覽器進(jìn)行攔截,要手動(dòng)開(kāi)啟才行,然后就搜索研究其他方法,就看到各種各樣的,通過(guò) js 打開(kāi)新窗口的方法了,這里就總結(jié)一下 解決下載功能 這里就先說(shuō)解決下載功能的方法,通過(guò)同事...
摘要:之前的項(xiàng)目,有個(gè)功能是下載文件,這里只要在瀏覽器輸入就會(huì)下載那個(gè)文件了。 之前的項(xiàng)目,有個(gè)功能是下載文件,這里只要在瀏覽器輸入 url 就會(huì)下載那個(gè)文件了。當(dāng)時(shí)我只是簡(jiǎn)單得使用 window.open ,但是卻會(huì)被瀏覽器進(jìn)行攔截,要手動(dòng)開(kāi)啟才行,然后就搜索研究其他方法,就看到各種各樣的,通過(guò) js 打開(kāi)新窗口的方法了,這里就總結(jié)一下 解決下載功能 這里就先說(shuō)解決下載功能的方法,通過(guò)同事...
閱讀 1719·2021-11-25 09:43
閱讀 2681·2019-08-30 15:53
閱讀 1832·2019-08-30 15:52
閱讀 2911·2019-08-29 13:56
閱讀 3333·2019-08-26 12:12
閱讀 576·2019-08-23 17:58
閱讀 2151·2019-08-23 16:59
閱讀 945·2019-08-23 16:21