摘要:想要不被瀏覽器阻止,需要在事件的處理函數(shù)的作用域中調(diào)用打開新窗口,比如在用戶的時(shí)候。一是直接把綁定為函數(shù),大體這樣這樣做忽略了函數(shù)內(nèi)部已經(jīng)不屬于的作用域,所以不可行,依然會(huì)被瀏覽器阻止。
想要window.open不被瀏覽器阻止,需要在事件的處理函數(shù)的作用域中調(diào)用window.open打開新窗口,比如在用戶click的時(shí)候。
xxx.onClick = ()=>{ window.open("/"); }
但是當(dāng)處理函數(shù)(handle)中涉及到異步操作的時(shí)候, 我產(chǎn)生了兩種錯(cuò)誤的解決想法。一是直接把handle綁定為async函數(shù),大體這樣
xxx.onClick = async()=>{ let url = await oneAsyncOperation; window.open(url); }
這樣做忽略了async函數(shù)內(nèi)部已經(jīng)不屬于handle的作用域,所以不可行,依然會(huì)被瀏覽器阻止。意識(shí)到這點(diǎn)之后,隨手就改,大體這樣:
let handleGenerator = async()=>{ let url = await oneAsyncOperation; return ()=>{ window.open(url); } } xxx.onClick = handleGenerator();
期望的是通過一個(gè)async高階函數(shù),在函數(shù)體內(nèi)進(jìn)行異步操作,然后返回一個(gè)普通函數(shù)作為handle。
馬上就發(fā)現(xiàn)自己又想錯(cuò)了,async函數(shù)的返回體是Promise,不是Function,因此并不能作為handle。
最后只能放棄使用async函數(shù),換用另一個(gè)方案來打開窗口:
xxx.onClick = ()=>{ let win = window.open("/"); //在handle的作用域內(nèi),先打開一個(gè)window oneAsyncOperation().then((url)=>{ win.location.href = url; //然后在異步操作的回調(diào)中對(duì)前面創(chuàng)建的新window重新設(shè)置屬性 }) }
ps: 上面先創(chuàng)建的window, 一般先打開一個(gè)loading頁面的地址。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/88143.html
摘要:作為對(duì)象屬性的文檔元素如果文檔中用屬性為元素命名。其就是交互窗口中的每個(gè)窗口窗體都是的執(zhí)行上下文。以對(duì)象作為全局對(duì)象,這樣的話,一個(gè)窗口窗體中的代碼可以應(yīng)用到其他窗口或者窗體并且同源策略沒有進(jìn)行阻止。 作為window對(duì)象屬性的文檔元素 如果html文檔中用id屬性為元素命名。并且如果 window對(duì)象沒有此名字的屬性,則window對(duì)象會(huì)賦予一個(gè)屬性,其名字為id屬性的值,其值指向該...
摘要:原因分析深入研究當(dāng)瀏覽器檢測(cè)到非用戶操作產(chǎn)生的新彈出窗口,則會(huì)對(duì)其進(jìn)行阻止。但是,被瀏覽器攔截我們代碼中要彈出的窗口并不是程序員所希望的。 現(xiàn)象 最近在做項(xiàng)目的時(shí)候碰到了使用window.open被瀏覽器攔截的情況,搞得人無比郁悶啊,雖然在自己的環(huán)境可以對(duì)頁面進(jìn)行放行,但是對(duì)用戶來說,不能要求用戶都來通過攔截。何況當(dāng)出現(xiàn)攔截時(shí),很多小白根本不知道發(fā)生了啥,不知道在哪里看被攔截的頁面,簡(jiǎn)...
摘要:僅限數(shù)值表示新窗口的高度。一個(gè)字符串參數(shù),并將其顯示給用戶,提供兩個(gè)按鈕,一個(gè)按鈕返回布爾值另一個(gè)按鈕返回布爾值。 全局作用域 window 在是BOM 的核心對(duì)象,他是瀏覽器的一個(gè)實(shí)例。 在全局作用域中聲明的變量、函數(shù)都會(huì)變成window 對(duì)象的屬性和方法。如: var age = 18; function sayAge(){ console.log(window.age);...
摘要:可以說同源策略在安全中扮演著及其重要的角色。我把這個(gè)領(lǐng)域的東西寫成了一個(gè)系列,以后還會(huì)繼續(xù)完善下去安全一同源策略與跨域安全二攻擊安全三攻擊 之所以要將同源策略與跨域?qū)懺谝黄?,是因?yàn)榇嬖跒g覽器的同源策略,才會(huì)存在跨域問題 何為同源策略 同源策略是瀏覽器實(shí)現(xiàn)的一種安全策略,它限制了不同源之間的文檔和腳本交互的權(quán)限。只有同一個(gè)源的腳本才會(huì)具有操作dom、讀寫cookie、session 、a...
摘要:常見內(nèi)存泄漏情形全局變量被忘記的或者閉包引用閉包概念有權(quán)訪問另一個(gè)函數(shù)作用域的變量的函數(shù)。會(huì)話存儲(chǔ)刷新頁面依舊存在,與在持久上不同外,其余一致。請(qǐng)求向指定的資源提交被處理的數(shù)據(jù),數(shù)據(jù)量和類型沒限制,不主動(dòng)緩存,頁面刷新數(shù)據(jù)會(huì)被重新提交。 defer 腳本延遲執(zhí)行,適用于外部腳本文件async 立即下載,不保證順序(建議不修改DOM,避免重繪) CDN加速 (Content De...
閱讀 1707·2021-10-09 09:44
閱讀 3269·2021-09-27 13:36
閱讀 1527·2021-09-22 15:33
閱讀 1282·2021-09-22 15:23
閱讀 1168·2021-09-06 15:02
閱讀 1706·2019-08-29 16:14
閱讀 2913·2019-08-29 15:26
閱讀 2414·2019-08-28 18:08