Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 规则;阻止此页面创建其他对话框";_Javascript_Jquery_Firefox - Fatal编程技术网

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

Javascript 规则;阻止此页面创建其他对话框";,javascript,jquery,firefox,Javascript,Jquery,Firefox,我试图了解Firefox在对话框上添加的“阻止此页面创建其他对话框”的行为 使用jquery,如果我添加以下侦听器: //html <input class="testInput" /> //javascript $('.testInput') .click(function(){ alert('clicked') }) .keyup(function(){ alert('keyup') }) //html //javascript $(“.testInput”) .click(

我试图了解Firefox在对话框上添加的“阻止此页面创建其他对话框”的行为

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

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

//javascript
$('.testInput')
.click(function(){ alert('clicked') })
.keyup(function(){ alert('keyup') })
//html
//javascript
$(“.testInput”)
.click(函数(){alert('clicked')})
.keyup(函数(){alert('keyup')})
  • 单击输入时,警报框会正常显示,直到 ~13次
  • 另一方面,当按下一个键时,第二个消息框已经出现 显示消息“阻止此页面创建其他页面” 对话”。事实上,似乎有一些蒂莫特,如果我等一下 两次击键间隔2秒,消息消失
  • 在我的非正式测试中,
    2.
    实际上适用于未从onclick回调中调用警报框的情况(例如:keyup回调,显示警报框以响应ajax操作…)

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

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

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

    [编辑]

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


    您可以从jsfiddle(thx-Rory-McCrossan)测试这一点。

    如果您愿意,您可以在Firefox源代码中进行测试。请注意,不同的浏览器将有不同的规则

    Firefox的相关代码在和中(下面的链接指向行号,因此会随着源代码的更改而慢慢腐烂)。它似乎由
    nsGlobalWindow.h
    中的常数(10)和(3,单位为秒)控制
    nsGlobalWindow.cpp
    保留计数(
    mdialogabusecont
    )。显然,该函数会根据对话框打开的时间是否超过连续对话框的时间限制来增加或清除
    mdialogabusecont
    。该函数使用
    mdialogabusecont
    (部分)来确定它们是否被阻止

    简而言之:如果你反复打开弹出窗口,然后在三秒内关闭它们,大约10秒后,你会触发一些东西。

    确切的规则:弹出对话框之间的时间间隔。 用于确定这一点的值在连续对话框时间限制中设置

    查看代码段下面链接中的第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;}
    
    nsGlobalWindow::DialogOpenExpected()
    TimeDuration dialogDuration(TimeStamp::Now()-topWindow->mLastDialogQuitTime);
    如果(dialogDuration.ToSeconds()mDialogAbuseCount++;返回(topWindow->GetPopupControlState()>openAllowed | | topWindow->mDialogAbuseCount>MAX_dialog_计数)}topWindow->mDialogAbuseCount=0;返回false;}
    

    FYI:使用此小提琴进行测试()我在第12次迭代时在警报中选中了“单击”和“键入”复选框。@Rory:我仍然有我的行为。你有什么浏览器?用于JSFIDLE链接的thx。只是为了填充更多的数据输入;我在FF 9.0.1 Windows XP SP3上的第12次单击迭代和第2次键控迭代中得到了它。@LeGEC抱歉忘了提到浏览器,W7 Pro X64上的FF9.0.1如何重置?现在我想再看一次对话!这个值是多少?