"阻止此页面创建其他对话框"的规则

LeG*_*GEC 5 javascript firefox jquery

我尝试了解Firefox在对话框中添加的"阻止此页面创建其他对话框"的行为.

使用jquery,如果我添加以下侦听器:

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

//javascript
$('.testInput')
.click(function(){ alert('clicked') })
.keyup(function(){ alert('keyup') })
Run Code Online (Sandbox Code Playgroud)
  1. 单击输入时,警报框会正常显示,直到第13次.
  2. 另一方面,当敲击一个键时,第二个消息框已经出现,并显示消息"阻止此页面创建其他对话框".实际上,似乎有一些tiemout,如果我在两次击键之间等待2秒,则消息消失.

从我的非正式测试中,2.只要在onclick回调中没有调用警报框(例如:keyup回调,显示响应ajax动作的警告框......),实际应用.

我在Ubuntu下使用Firefox 9.0.1,据我所知,我没有调整firefox关于这些阈值的设置.我想任何浏览器的任何最新版本都会发生这种情况.

我正在使用jQuery库,但我不认为它在这里是相关的.

我的问题是:这个警告出现在对话框中的确切规则是什么?

[编辑]

使用Chromium/Ubuntu(版本17.0.963.26),阈值似乎只是两个对话框之间的延迟.

你可以在这里从jsfiddle测试这个(thx Rory McCrossan)

小智 6

确切的规则:弹出对话框之间的定时间隔.用于确定此值的值在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;}
Run Code Online (Sandbox Code Playgroud)

链接到源