转到 Twitter 的登录页面并在控制台中键入以下内容:
window.addEventListener('keypress', function(e){console.log('hello')}, true)
(注意:如何将第三个参数设置为 true
以启用事件捕获。这会导致事件在被子元素使用之前首先被窗口拦截。)
尝试按一些键。请注意 hello
是如何不输出到控制台的。为 keydown
或 keyup
添加事件监听器不会改变任何内容。
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/