成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

handle中存在異步操作,window.open被瀏覽器阻止的問題

iliyaku / 1988人閱讀

摘要:想要不被瀏覽器阻止,需要在事件的處理函數(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

相關(guān)文章

  • 作為window對(duì)象屬性元素 多窗口和窗體

    摘要:作為對(duì)象屬性的文檔元素如果文檔中用屬性為元素命名。其就是交互窗口中的每個(gè)窗口窗體都是的執(zhí)行上下文。以對(duì)象作為全局對(duì)象,這樣的話,一個(gè)窗口窗體中的代碼可以應(yīng)用到其他窗口或者窗體并且同源策略沒有進(jìn)行阻止。 作為window對(duì)象屬性的文檔元素 如果html文檔中用id屬性為元素命名。并且如果 window對(duì)象沒有此名字的屬性,則window對(duì)象會(huì)賦予一個(gè)屬性,其名字為id屬性的值,其值指向該...

    fredshare 評(píng)論0 收藏0
  • window.open覽器攔截解決方案

    摘要:原因分析深入研究當(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)...

    rickchen 評(píng)論0 收藏0
  • JavaScript BOM——“window 對(duì)象”注意要點(diǎ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);...

    levius 評(píng)論0 收藏0
  • web安全一,同源策略與跨域

    摘要:可以說同源策略在安全中扮演著及其重要的角色。我把這個(gè)領(lǐng)域的東西寫成了一個(gè)系列,以后還會(huì)繼續(xù)完善下去安全一同源策略與跨域安全二攻擊安全三攻擊 之所以要將同源策略與跨域?qū)懺谝黄?,是因?yàn)榇嬖跒g覽器的同源策略,才會(huì)存在跨域問題 何為同源策略 同源策略是瀏覽器實(shí)現(xiàn)的一種安全策略,它限制了不同源之間的文檔和腳本交互的權(quán)限。只有同一個(gè)源的腳本才會(huì)具有操作dom、讀寫cookie、session 、a...

    cgspine 評(píng)論0 收藏0
  • js基礎(chǔ)知識(shí)筆記

    摘要:常見內(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...

    李文鵬 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<