代码之家  ›  专栏  ›  技术社区  ›  Zorak

阅读控制台.log()输出表单javascript

  •  0
  • Zorak  · 技术社区  · 7 年前

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

    在纯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();
       }
    
    }
    

    提前感谢:)

    4 回复  |  直到 7 年前
        1
  •  1
  •   Blue    7 年前

    正如其他人所说,您可以重写 console.log() 使用自己的功能,并实现自己的实现:

    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
    
        2
  •  1
  •   Charles Cavalcante    7 年前

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

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

    function readConsole(){
       //read console record by record
       consoleStorage.forEach(msg => {
          doSomething(msg);
       });
    }
    
        3
  •  0
  •   Drakinite    7 年前

    console.log

    我会说用布尔语言编程(比如 ifDidX ifDidY )会更好。但是,如果您真的要做这个消息历史记录的事情,更好的选择是将消息存储在其他数组中。举个例子:

    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");
      }
    }
        4
  •  0
  •   Roy    7 年前

    console.stdlog = console.log.bind(console);
    console.log = function(msg){
        if(msg == "something I want"){
        ...
        }
        console.stdlog.apply(console, arguments);
    }
    

    虽然你需要非常小心,因为如果你添加任何控制台.log在这种情况下,它将创建一个无限循环。