首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >读取console.log()输出表单javascript

读取console.log()输出表单javascript
EN

Stack Overflow用户
提问于 2018-09-16 02:39:20
回答 4查看 5.2K关注 0票数 1

我正在使用Greasemonkey为一个应用程序编写覆盖UI,将JS注入到页面中。

现在我遇到了一些在网页上运行的ajax调用的问题。但是,该页面正在生成控制台日志,通知内容已完全加载。我的问题是:

在纯javascript中,是否有可能读取由完全不同的脚本生成的控制台输出?

代码语言:javascript
复制
function blackBox(){
   //this is generating come console output.
   //this runs on code layer I have no access to.
}

function readConsole(){
   //read console record by record
   if(console.msg == "something I want"){
      doSomething();
   }

}

提前感谢:)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-09-16 02:49:06

正如其他人所说,您可以用自己的函数覆盖console.log()函数,并实现自己的实现:

代码语言:javascript
复制
var oldLog = unsafeWindow.console.log;
var messages = [];

unsafeWindow.console.log = function(msg) {
    messages.push(msg);
    oldLog.apply(null, arguments);
}

// Access the entire console.log history in messages
票数 1
EN

Stack Overflow用户

发布于 2018-09-16 02:49:28

重新定义阵列上的console.log和存储消息:

代码语言:javascript
复制
var consoleStorage = [];

console.log = function(msg){
   consoleStorage.push(msg);
   console.warn(msg); // if you need to print the output
}

现在您可以读取所有日志:

代码语言:javascript
复制
function readConsole(){
   //read console record by record
   consoleStorage.forEach(msg => {
      doSomething(msg);
   });
}
票数 1
EN

Stack Overflow用户

发布于 2018-09-16 02:57:21

即使这是可能的,那也是一种糟糕的做法。控制台是供人在调试时用肉眼看到的。执行console.log通常需要几毫秒的时间,所以在生产代码中执行它不是一个好主意。

我想说用布尔语言(如ifDidXifDidY)进行编程会更好。但是,如果您真的要做这个消息历史记录的事情,一个更好的选择是将消息存储在其他数组中。下面是一个示例:

代码语言:javascript
复制
var messagesLog = [];
//Since console.log takes several milliseconds to execute, you should tick this to false in production code.
const logToConsole = true;

function logMessage( message ){

  //adds message to JS log.
  messagesLog.push(message);
  
  //performs console.log if not production code
  if(logToConsole){
    console.log(message);
  }
}

logMessage("pizza");
logMessage("second to last message");
logMessage("last message");

//checks last message and this will be true
if( messagesLog[messagesLog.length - 1] == "last message" ){
  logMessage("The last message in the log was 'last message'");
}
//checks last message and this will be false
if( messagesLog[messagesLog.length - 1] == "pizza" ){
  logMessage("This will not occur because the last message was 'last message'");
}
//searches through log to find certain message
for(let i = 0; i < messagesLog.length; i++){
  if(messagesLog[i] == "pizza"){
    logMessage("one of the messages in the log was pizza");
  }
}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52347756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档