如何在网站禁用后重新启用Chrome开发者控制台?

时间:2014-12-19 09:04:13

标签: javascript google-chrome developer-tools

有些网站会在放置小部件的每个网页上停用Chrome控制台(console.log无效)。

是否可以重新启用它?(如黑客或其他内容)

P.S。据我了解,他们只是重写控制台功能。所以我的问题基本上是这样的:是否有任何解决方案将其重新恢复正常?(如果我对阻塞控制台的理解是正确的)

2 个答案:

答案 0 :(得分:2)

这是你可以使用的黑客。我看不到有任何方法可以将其重置为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;

唯一需要注意的是,如果当前页面本身位于带有sandbox的iframe中,就像堆栈片段一样,那么您可能会遇到安全错误,而且您可以做很多事情。

此代码段[当前]不会运行,例如因为它只有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');

答案 1 :(得分:0)

你说“重新启用”。我不知道该怎么做。另一方面,如果您控制页面,则可以防止它被覆盖。只需确保首先执行此操作。

(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)));

甚至可能使用扩展名

注入它