在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 為什么alert之后,不暫停,而是立馬就刷新地址了,這個(gè)alert是自己寫的?

為什么alert之后,不暫停,而是立馬就刷新地址了,這個(gè)alert是自己寫的?

圖片描述

回答
編輯回答
糖豆豆

alert停止當(dāng)前操作,確認(rèn)后還是會(huì)執(zhí)行下面語句

2017年1月20日 16:29
編輯回答
眼雜

你可以自己實(shí)現(xiàn)個(gè)alert,當(dāng)點(diǎn)擊確定之后在進(jìn)行跳轉(zhuǎn)操作

2017年1月24日 09:44
編輯回答
尋仙

你是不是開著控制臺(tái)進(jìn)行測試的,剛剛用chrome測試了一下,如果開著控制臺(tái)并且控制臺(tái)取得了焦點(diǎn),alert不會(huì)立即阻塞正在運(yùn)行的線程,得等到焦點(diǎn)從控制臺(tái)重新回到頁面才會(huì)發(fā)出alert并阻塞線程;但如果在執(zhí)行alert之后立即修改window.location.href,此時(shí)控制臺(tái)又取得了焦點(diǎn),則alert不會(huì)立即阻塞線程,jvm轉(zhuǎn)而執(zhí)行下一個(gè)語句修改window.location.href,而這將導(dǎo)致之前尚未發(fā)出的alert被取消(我猜的)。

結(jié)論是,不要開著控制臺(tái)測試這段代碼。

以下是我的測試代碼:

setTimeout(() => $.ajax({
    url: '/',
    type: 'GET',
    success: data => {
        console.log('Before rua');
        alert('Rua!');
        console.log('After rua');
        window.location.href += '#';
    },
    error: (...args) => console.log(...args)
}), 1000);

如果你在1秒內(nèi)沒有將焦點(diǎn)切回頁面,則alert不會(huì)發(fā)出,且window.location.href將被立刻修改;若你在1秒內(nèi)將焦點(diǎn)切回頁面,則alert發(fā)出,且window.location.href將會(huì)在你將alert dismiss掉后被修改。

或者更簡單粗暴一點(diǎn):

setTimeout(() => {
    console.log('Before rua');
    alert('Rua!');
    console.log('After rua');
    window.location.href += '#';
}, 1000);

同上,1秒內(nèi)切回頁面就能看到alert,dismiss后window.location.href才會(huì)被修改,反之alert會(huì)被取消。

與上述代碼之對(duì)比:

setTimeout(() => {
    console.log('Before rua');
    alert('Rua!');
    console.log('After rua');
    // window.location.href += '#';
}, 1000);

這里只是發(fā)出一個(gè)alert,并沒有修改window.location.href,在控制臺(tái)輸入上述代碼并運(yùn)行后等待一秒,看到控制臺(tái)輸出了“Before rua”和“After rua”,這時(shí)再將焦點(diǎn)切回頁面,才會(huì)看到一個(gè)alert彈出。

綜上,我猜測alert其實(shí)也可以是異步的——當(dāng)渲染進(jìn)程檢測到當(dāng)前頁面沒有獲取到焦點(diǎn)時(shí),比如被用戶最小化了,此時(shí)若頁面中嵌入的js試圖發(fā)出alert,則渲染進(jìn)程不會(huì)立刻彈出alert,而是將請(qǐng)求放入一個(gè)隊(duì)列中(pending),等待下一次獲取焦點(diǎn)時(shí)再一一彈出。

補(bǔ)充一下,目前使用chrome測試的結(jié)果是只有在焦點(diǎn)被控制臺(tái)獲取時(shí)發(fā)出alert,并且在alert之后修改了window.location.href(焦點(diǎn)仍在控制臺(tái)),才會(huì)把alert直接取消掉。最小化瀏覽器的話瀏覽器會(huì)自動(dòng)跳出來發(fā)出alert。

2018年8月3日 14:26
編輯回答
還吻

在控制臺(tái)輸入alert 不要括號(hào) 自己寫的就能看到代碼 原生的只會(huì)看到native code

2017年7月4日 13:41