我正在使用非常有限的网络平台,该平台使用第三方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
有什么想法吗?我假设您将当前内容转换为数组或字符串并解析结果。
答案 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);