2012-01-13 63 views
5

我嘗試瞭解Firefox在對話框中添加的「阻止此頁面創建其他對話框」的行爲。「阻止此頁面創建其他對話框」的規則

使用jQuery,如果我添加以下監聽器:

//html 
<input class="testInput" /> 

//javascript 
$('.testInput') 
.click(function(){ alert('clicked') }) 
.keyup(function(){ alert('keyup') }) 
  1. 當輸入點擊,警告框通常出現,直到 〜13次。
  2. 另一方面,當擊中某個鍵時,出現第二個消息框 ,並顯示消息「阻止該頁面創建其他對話框」。實際上,似乎有一些tiemout,如果我在兩個按鍵之間等待2秒鐘, 消息消失。

從我的非正式測試中,2.其實適用於任何的警告框不從的onclick回調中調用(如:KEYUP回調,展現回答一個警告框的AJAX動作...)

我在Ubuntu下使用Firefox 9.0.1,據我所知,我還沒有調整關於這些閾值的Firefox的設置。 我想象它發生在任何瀏覽器的任何最新版本。

我正在使用jQuery庫,但我不認爲它在這裏是相關的。

我的問題是: 這個警告出現在對話框中的確切規則是什麼?

[編輯]

使用鉻/ Ubuntu的(17.0.963.26版本),該閾值似乎是僅兩個對話框之間的延遲。

您可以測試這個從的jsfiddle here(羅裏THX McCrossan)

+1

FYI:與此小提琴測試(HTTP:// jsfiddle.net/RoryMcCrossan/9XwTn/)我在第12次迭代的警報中獲得了click和keyup的複選框。 – 2012-01-13 13:33:20

+0

@Rory:我仍然有我的行爲。你有什麼瀏覽器? thx爲jsfiddle鏈接。 – LeGEC 2012-01-13 13:37:50

+0

只是爲了填補一些更多的數據輸入;我在FF 9.0.1 Windows XP SP3上的第12次點擊迭代和第二次鍵盤迭代中得到它。 – 2012-01-13 13:40:15

回答

5

準確的規則:彈出對話框之間的定時間隔。 用於確定此值被設定在SUCCESSIVE_DIALOG_TIME_LIMIT

查覈行2614在片斷下面的鏈接:

nsGlobalWindow::DialogOpenAttempted() 

TimeDuration dialogDuration(TimeStamp::Now() - topWindow->mLastDialogQuitTime); 

if (dialogDuration.ToSeconds() < Preferences::GetInt("dom.successive_dialog_time_limit",SUCCESSIVE_DIALOG_TIME_LIMIT)){topWindow->mDialogAbuseCount++;return (topWindow->GetPopupControlState() > openAllowed || topWindow->mDialogAbuseCount > MAX_DIALOG_COUNT);}topWindow->mDialogAbuseCount = 0; return false;} 

Link to source

+0

而**這是什麼值**? – 2014-01-22 13:24:53

1

您可以踢左右Firefox的來源,如果你喜歡。請注意,不同的瀏覽器會有不同的規則。

Firefox的相關代碼是nsGlobalWindow.cppnsGlobalWindow.h(下面的鏈接是行號,所以會隨着源更改而慢慢腐爛)。它看起來受常數MAX_DIALOG_COUNT(10)在nsGlobalWindow.hSUCCESSIVE_DIALOG_TIME_LIMIT(3,單位是秒)的控制。 nsGlobalWindow.cpp保持計數(mDialogAbuseCount)。顯然,dialogDuration函數或者增加或者清除mDialogAbuseCount,這取決於對話是否已經打開了比SUCCESSIVE_DIALOG_TIME_LIMIT更長的時間。 AreDialogsBlocked函數使用mDialogAbuseCount(部分)來決定它們是否被阻止。所以簡而言之:如果你反覆打開彈出窗口,然後在三秒鐘內關閉它們,在10次左右之後,你會觸發一些東西。

相關問題