javascript - 为什么 console.log 在 Chrome 的某些网站上是一个空函数?

标签 javascript events event-handling dom-events

转到 Twitter 的登录页面并在控制台中键入以下内容:

window.addEventListener('keypress', function(e){console.log('hello')}, true)

(注意:如何将第三个参数设置为 true 以启用事件捕获。这会导致事件在被子元素使用之前首先被窗口拦截。)

尝试按一些键。请注意 hello 是如何不输出到控制台的。为 keydownkeyup 添加事件监听器不会改变任何内容。

hello 将在大多数网站上获得输出,但不会在 Twitter 或 Gmail 等网站上获得输出。

为什么?是什么阻止了事件监听器?

编辑:似乎在 Firefox 上按预期工作。但不是 Chrome 。为什么 Chrome 没有按预期触发事件监听器?

编辑 2:正如下面一些人所推论的,console.log 是 Chrome 上针对 Twitter 和 Gmail 等网站的空函数。这是为什么?

最佳答案

因为那些网站专门设置了(显然是为了 webkit):

console.log = function(){};

但是,在 Chrome 中,您可以通过在控制台中发出以下命令来恢复原始的 log() 功能:

console.log = console.__proto__.log

然后你可以这样做:

window.addEventListener('keypress', function(e){console.log('hello')}, true)

它应该按预期工作。

关于javascript - 为什么 console.log 在 Chrome 的某些网站上是一个空函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12611803/

相关文章:

鼠标移动速度非常快时,Javascript 鼠标事件未正确捕获

java - 如何使标签在单击时移动?

c# - 将通用事件处理程序连接到同一类型的多个控件

javascript - 无法附加到源缓冲区

javascript - 在列表元素 JQuery 内包装文本

javascript - 时间表的动态页面

javascript - jquery 从 1.7 迁移到 1.10.1

javascript - 在 Spark AR 中将标量数字解析为文本

android - 在 Android Web App 中捕捉方向键/轨迹球事件

javascript - HTML5 拖放 ondragover 未在 Chrome 中触发