是否可以在特定的console.log()条目之后执行Javascript函数?

时间:2016-03-28 23:51:57

标签: javascript console.log

我正在使用非常有限的网络平台,该平台使用第三方Javascript库。如果没有列出其操作方式和原因的无关细节,我很好奇是否可以在出现特定的console.log条目后执行某些操作(例如执行Javascript函数)。该系统已被锁定,但我正试图改善应用程序的整体用户体验。

此Javascript库中的典型控制台日志条目通常如下所示:

class A
{
    constructor() { this.a = 1; }
}

function initB()
{
    let newThis = new A();
    newThis.b = 2;
    return newThis;
}

class B extends A
{
    constructor() { return initB(); }
}

谷歌搜索会产生大量无关的结果。我发现这涉及覆盖console.log方法,但这不是我想要的接近:How to get the console.log content as string in JavaScript

有什么想法吗?我假设您将当前内容转换为数组或字符串并解析结果。

1 个答案:

答案 0 :(得分:1)

您可以覆盖console.log()并保持记录到控制台,这样您就可以捕获输出并保留记录。

这是一种方法:

var logEntries = [];

(function(oldLog) {

    console.log = function(arg) {
        // captures only first argument to console.log()
        // could be expanded to concatenate all entries
        logEntries.push(arg.toString());

        // now call original console.log() with original arguments
        return oldLog.apply(console, arguments);
    };
})(console.log);

因此,现在在任何给定时间,logEntries变量将是发送到console.log()的所有内容的累积数组。这是一个不扩展对象或枚举数组的简单版本。可以添加该区域中的更多功能,但看起来您只是在寻找特定的字符串。

如果您只想捕获包含"access_token"的内容,也可以在添加到logEntries数组之前添加任何过滤。

如果您只想捕获包含"access_token="的行,那么您可以像这样修改上面的代码:

var logEntries = [];

(function(oldLog) {

    console.log = function(arg) {
        if (typeof arg === "string" && arg.indexOf("access_token=") !== -1) {
            logEntries.push(arg);
        }

        // now call original console.log() with original arguments
        return oldLog.apply(console, arguments);
    };
})(console.log);