2012-05-23 25 views
0

在我的Mac上的Firefox上運行此示例http://jsfiddle.net/yxzqY/,大約一半的確認提示出現,並顯示「防止此窗口創建更多對話框」複選框。我瞭解允許用戶禁用警報,但確認框是控制流程的一部分 - 單擊「確定」或「取消」指示下一個事件序列 - 禁用它們會中斷應用程序。爲什麼Firefox允許禁用確認框?

我看到大量依賴於確認提示的應用程序,並且從未見過Firefox或任何其他瀏覽器正在執行此操作(見證試圖刪除StackOverflow上的問題) - 那麼爲什麼會出現在這裏?爲什麼它只是偶爾發生?我們如何才能防止它發生?

+0

Chrome也這樣做。它似乎只發生在觸發太多盒子(在短時間內)時。 –

+0

Rocket-行爲似乎不符合它被觸發的次數。嘗試我的例子幾次,你會看到它。然後點擊StackOverflow中的評論「快速消失」中的「刪除」,並且它永遠不會顯示。還有其他事情正在進行...... – Yarin

+0

我在Windows上的Firefox 12中測試了它,並且每秒更改一次,並在對話框中顯示「阻止此窗口創建更多對話框」。等待~4秒似乎是最佳位置。 –

回答

2

據我所知,「防止進一步對話」複選框的標準是用戶已經在短時間內在一行中呈現多個對話框(可能在5秒鐘左右Firefox的版本; Chrome中的第二個或兩個版本)。

它正在在這種情況下增加的原因是爲了避免惡意網頁的捆綁與對話的無盡的序列用戶達:

while(1) { 
    alert("Is this annoying yet?"); 
} 

如果您希望您的應用程序將使用大量的確認對話框像這,我建議您使用DOM對話框(例如,http://jqueryui.com/demos/dialog/)而不是原生alert()confirm()

+0

diskwuff-看到我對Rocket的評論 - 它不依賴於頻率。點擊您的答案刪除/取消多次,它永遠不會發生。 – Yarin

+1

我可以在Chrome瀏覽器中觸發一個沉默複選框,方法是每秒鐘在評論上敲擊刪除按鈕。 (使用ESC鍵取消對話框,而不是單擊取消,可能更容易看到。) – duskwuff

+0

hmm- OK,沒有看到的..但是,什麼在我的演示發生,似乎被什麼東西來衡量else-我不能得到超過兩個或三個沒有得到它 – Yarin