为什么只要显示javascript警报,Chrome等浏览器就会“锁定”

时间:2017-01-24 12:35:26

标签: javascript google-chrome

每当显示alert时,我始终会看到浏览器“锁定”自己。这个小技巧也经常被欺骗网站滥用,以防止你关闭浏览器,或在你的计算机上做任何其他事情。

我看不出为什么像 Google 这样的科技巨头会允许(或添加)这种功能的原因?这似乎更像是一个缺陷,与一个特征相对立。

我知道有一个复选框,询问用户是否希望警报停止显示,但我已经看到了无数的解决办法。

那么,为什么还是一件事呢?任何人都可以解释为什么这甚至会成为一个有用的功能(因为,作为开发人员,我从来没有遇到过使用它的需要)?

感谢。

2 个答案:

答案 0 :(得分:3)

归结为向后兼容性。 alert在20世纪90年代被设计为一种阻挡模式。如果它们改变了依赖它的行为,它将破坏许多脚本。如果不破坏脚本,promptconfirm将无法实现。

至少大多数现代浏览器都有“阻止此页面提醒”复选框。

答案 1 :(得分:2)

之所以如此,是因为它(并且是)规范的一部分。

The current HTML5 specs在“用户提示”部分中说明了这一点。

alert

  

可选择在等待用户确认时暂停   消息

confirm

  

暂停,直到用户正面或负面回应

prompt

  

等待用户回复时暂停。

浏览器(用户代理)暂停alert暂停,为了与其他用户提示保持一致,可能忽略了可选部分。

此外,我们在此时,the specs say this about pause

  

由于历史原因,本规范中的一些算法   要求用户代理在运行任务时暂停,直到出现条件   目标得以实现。这意味着运行以下步骤:

     
      
  1. 如有必要,请更新任何文档的呈现或用户界面   或浏览上下文以反映当前状态。

  2.   
  3. 等到达到条件目标。用户代理暂停时   任务,相应的事件循环不能运行任何进一步的任务   当前运行的任务中的脚本必须阻止。用户代理应该   但是,虽然暂停,但仍然会在暂停时保持对用户输入的响应   因为事件循环不会做任何事情而减少了容量。

  4.   

因此,虽然规范确实说要保持用户代理响应,但似乎这样做并不容易。因为,之后它以粗体红色

显示此警告
  

警告:   暂停对用户体验非常不利,尤其是在用户体验方面   在多个事件之间共享单个事件循环的场景   文档。鼓励用户代理尝试替代方案   暂停,例如旋转事件循环甚至简单地继续   在任何情况下都没有任何暂停执行   可以这样做,同时保持与现有的兼容性   内容。如果不那么激烈,这个规范将会愉快地改变   发现替代品与网络兼容。

     在此期间,实施者应该意识到各种各样的   用户代理可能尝试的替代方案可能会发生微妙变化   事件循环行为的各个方面,包括任务和微任务计时。   即使这样做,实现也应该继续进行试验   它们违反了暂停操作所暗示的确切语义。

这样做的关键是鼓励实施者寻找并尝试不那么激烈的替代方案。但是,同时保留与现有内容的兼容性(例如阻止脚本)。