为啥“console.log()”在这个网站上不起作用?

Posted

技术标签:

【中文标题】为啥“console.log()”在这个网站上不起作用?【英文标题】:Why doesn't "console.log()" work on this website?为什么“console.log()”在这个网站上不起作用? 【发布时间】:2022-01-08 16:02:20 【问题描述】:

我可以打开这个 URL 的 Chrome DevTools 控制台:https://www.google.com/ 并输入以下命令来打印“Hello world!”到控制台:

console.log("Hello world!")

但是,当我尝试对此 URL 使用相同的命令时:https://svc.mt.gov/dor/property/prc 我的消息没有打印在控制台中。这是为什么呢?

有什么方法可以强制控制台为这个 MT 网站工作?

我尝试使用 python/selenium 打开页面并使用 execute_script() 来发出命令,但这也没有奏效。

【问题讨论】:

不是重复的 IMO,但另请参阅 How does Facebook disable the browser's integrated Developer Tools?,因为它要求一些密切相关的内容 【参考方案1】:

如果你这样做

console.dir(console.log)

然后点击[[FunctionLocation]],您会在网站的源代码中看到以下内容:

"Debug" != e && (window.console.log = function() 
    )

似乎是一种抑制生产日志记录的廉价(但懒惰?)方式。

修复它的一种方法是使用one of the many other console commands。 (console.dir,或console.error,如果你愿意)

如果您真的希望原来的console.log 再次工作,唯一的方法是在页面代码运行之前运行代码,这样您就可以保存对该函数的引用.例如,使用用户脚本:

// <metadata block...>
// @grant none
// ==/UserScript==

const origConsoleLog = console.log;
// set original window.console.log back to its original
// after the page loads
setTimeout(() => 
  window.console.log = origConsoleLog;
, 2000);

// there are more elegant but more complicated approaches too

【讨论】:

请不要说“谢谢”作为评论。如果答案对您有所帮助,请accept that answer。【参考方案2】:

CertainPerformance 已经解释了这是如何实现的,以及抑制日志的原因似乎是什么。我将在这里展示另一种在原件丢失后找回console.log 的方法。

document.body.appendChild(document.createElement('IFRAME')).onload = function () 
    this.contentWindow.console.log('Hello, World!');
    this.remove();
;

这基本上使用了来自临时 iframe 的旧方法 restoring global objects。

【讨论】:

你甚至可以使用console.log = this.contentWindow.console.log,但在这种情况下你不需要.remove() Firefox 中的 iframe。

以上是关于为啥“console.log()”在这个网站上不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

Javascript:为啥有时 alert() 不起作用但 console.log() 起作用?

keyup、keydown 和 keypress 事件在移动设备上不起作用

为啥这个 $.post() 在 iOS 上不起作用?

为啥这个简单的动画在 iOS 7 上不起作用?

为啥我的下拉菜单在某些页面上不起作用

为啥这个 CSS 转换在锚点内的 SVG 上不起作用