【问题标题】:Get access to the console once the console object reference was changed更改控制台对象引用后访问控制台
【发布时间】:2014-02-21 20:25:39
【问题描述】:

我喜欢制作用户脚本。对您最喜欢的页面进行更多控制或只是加快加载速度真的很有趣。

目前,我遇到了一个问题,页面要么定义了对新虚拟对象的控制台引用:

window.console = {log: function() {}, info: function() {} ... };

或者它甚至会破坏函数:

window.console.log = function() {};
window.console.info = function() {};
...

我使用window 来表明我在谈论全局范围。另外,在第二个示例中,我没有故意对同一功能使用快速分配

现在你会如何处理这个问题?警报很好用,但我已经习惯了 Firebug,而且它的控制台很多。
无法表达我会多么优雅地寻求帮助。

PNS.:目前,League of Legends forums 是有问题的网站。运行以下代码查看问题:

window.console.log.toString(); //returns "function () {}"

【问题讨论】:

    标签: javascript firebug greasemonkey console.log


    【解决方案1】:

    嗯,我有一个讨厌的解决方案。创建一个 iframe(创建新窗口)并获取该 iframe 的控制台对象:

    function healConsole() {
      //<iframe> element
      var iframe = document.createElement("iframe");
      //Hide it somewhere
      iframe.style.position="fixed";
      iframe.style.height = iframe.style.width = "1px";
      iframe.style.top = iframe.style.left = "-5px";
      //No src to prevent loading some data
      iframe.src = "about: blank";
      //Needs append to work
      document.body.appendChild(iframe);
      //Get the inner console
      window.console = iframe.contentWindow.console;
    }
    

    不知道这是如何跨浏览器。我正在寻找更好的东西......

    【讨论】:

    • 这可能是您所能获得的跨浏览器。使用 Chrome 开发工具,您还可以使用 hack delete console; delete console.loglog 存在于原型中,console 是神奇的),使用 Firefox devtools 可以使用 hack delete consoleconsole 更神奇)。然而,Firebug 的控制台并不神奇,因此如果没有新的全局对象,您将无法使用它。 (当然,除非你可以在 console 被覆盖之前得到它。)
    • 感谢其他选项,我现在就试试。我不喜欢仅仅因为这个而创建一个元素(尤其是 iframe)的想法。
    • 您可能还想关注issue 5995(在无法注入控制台 API 时给出提示)和issue 6268(向命令行公开一个干净的“控制台”对象)。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 1970-01-01
    相关资源
    最近更新 更多