如何在覆盖控制台对象的功能后使用console.log()?

时间:2014-10-18 04:30:11

标签: javascript jquery console.log

我需要console.log(),但它无法正常工作,因为有人在生产网站中阻止了它。有没有其他方法可以打印到控制台?或者使用可以打印完整对象的警报,例如console.log()吗?或者重新定义console.log()以便它再次运行的方法?

我可以使用jQuery库。

2 个答案:

答案 0 :(得分:7)

根据他们阻止它的方式,你可以使用这样的东西。

    console.log = function fake() {};
    console.log("oh no! it's not working!")

    delete console.log;
    console.log("whew.  back again.");

这只会删除已应用的自定义定义。

如果他们做了比这更聪明的事情,你可能会做这样的事情。这会创建一个全新的iframe,其中包含一个全新的window对象,您可以从中提取原始console。这仅在body元素已存在时才有效。

    var frame = document.createElement("iframe");
    frame.style.display = "none";
    document.body.appendChild(frame);

    var myConsoleLog = function(message) {
        (frame.contentWindow || frame).console.log(message);
    }
    myConsoleLog("this works too!");

答案 1 :(得分:2)


您可以对对象进行字符串化并将其附加到页面上。 JSON.stringify有两个额外的参数,replacer(忽略)和空格数,也就是说它会为你做一些格式化。

这很简单:

document.body.appendChild(document.createTextNode(JSON.stringify(obj, null, 2)));

稍微复杂的例子: http://codepen.io/JAStanton/pen/qehpH

如果你告诉我你希望摆脱它,我会更有帮助。你只关心对象/属性吗?你想知道对象上的函数等吗??