【发布时间】:2014-12-19 09:04:13
【问题描述】:
某些网站在放置小部件的每个页面上都禁用了 Chrome 控制台(console.log 不起作用)。
这是一种重新启用它的方法吗?(比如 hack 之类的)
附:据我了解,他们只是在重写控制台功能。所以我的问题基本上是这样的:是否有任何解决方案可以将其改写为正常状态?(如果我对阻塞控制台的理解是正确的)
【问题讨论】:
标签: javascript google-chrome developer-tools
某些网站在放置小部件的每个页面上都禁用了 Chrome 控制台(console.log 不起作用)。
这是一种重新启用它的方法吗?(比如 hack 之类的)
附:据我了解,他们只是在重写控制台功能。所以我的问题基本上是这样的:是否有任何解决方案可以将其改写为正常状态?(如果我对阻塞控制台的理解是正确的)
【问题讨论】:
标签: javascript google-chrome developer-tools
这是一个你可以使用的技巧。我看不到任何方法可以将其重置为 Chrome 使用的原始 Console 类,例如window.console = new Console(),因为它似乎无法访问。
相反,您需要获取不同的console 对象并将当前window.console 指向该对象。最简单的方法是创建一个隐藏的 iframe 并使用它。请注意,您必须将 iframe 保留在页面上。如果您删除它,console 将被清理并完全停止工作。
这里有一个 jQuery 1-liner 和a working fiddle:
window.console =
$('<iframe src="about:blank" style="display:none;"/>')
.appendTo(document.body)[0].contentWindow.console;
如果你想要一个纯 JS 解决方案 (fiddle):
var theFrame = document.createElement('iframe');
theFrame.src = "about:blank";
theFrame.style.display = "none";
document.body.appendChild(theFrame);
window.console = theFrame.contentWindow.console;
唯一需要注意的另一件事是,如果当前页面本身位于带有sandboxing 的 iframe 中,就像堆栈 sn-ps 一样,那么您可能会遇到安全错误,并且您无能为力.
这个 sn-p [当前] 不运行,例如,因为它只有 sandbox="allow-scripts"
// break the console
window.console = {
log: function(x) { alert('haha I hijacked your console'); }
}
console.log('debug message');
var theFrame = document.createElement('iframe');
theFrame.src = "about:blank";
theFrame.style.display = "none";
document.body.appendChild(theFrame);
window.console = theFrame.contentWindow.console;
console.log('debug message');
【讨论】:
您说“重新启用”。我不知道该怎么做。另一方面,如果您控制页面,则可以首先防止它被覆盖。只需确保首先执行此操作即可。
(function(origConsole) {
Object.defineProperty(window, 'console', {
get: function() { return origConsole; },
set: function() {},
enumerable: true,
configurable: false,
});
}(window.console));
(function(origLog) {
Object.defineProperty(window.console, 'log', {
get: function() { return origLog; },
set: function() {},
enumerable: true,
configurable: false,
});
}(window.console.log.bind(window.console)));
甚至可以使用扩展程序注入它
【讨论】: