【问题标题】:How to re-enabled Chrome developer console after a website disabled it?网站禁用后如何重新启用 Chrome 开发者控制台?
【发布时间】:2014-12-19 09:04:13
【问题描述】:

某些网站在放置小部件的每个页面上都禁用了 Chrome 控制台(console.log 不起作用)。

这是一种重新启用它的方法吗?(比如 hack 之类的)

附:据我了解,他们只是在重写控制台功能。所以我的问题基本上是这样的:是否有任何解决方案可以将其改写为正常状态?(如果我对阻塞控制台的理解是正确的)

【问题讨论】:

    标签: javascript google-chrome developer-tools


    【解决方案1】:

    这是一个你可以使用的技巧。我看不到任何方法可以将其重置为 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');

    【讨论】:

      【解决方案2】:

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

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

      甚至可以使用扩展程序注入它

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-07
        • 2017-06-10
        • 1970-01-01
        • 2014-07-01
        • 2015-09-05
        • 2012-03-09
        • 1970-01-01
        • 2018-06-08
        相关资源
        最近更新 更多