【问题标题】:Detect a console.warn message检测 console.warn 消息
【发布时间】:2018-12-19 03:16:28
【问题描述】:

我需要找出警告(非错误)消息何时发送到浏览器的 console.log 。通过研究,我知道我可以使用类似于以下的 JavaScript 代码检测错误消息:

window.onerror = function(errorMsg, url, lineNumber){
    // any action you want goes here
    // errorMsg is the error message itself.
    // url should be the file presenting the error, though i have
    //    found that it only presents to me the address of the site.
    // lineNumber is the line number the error occoured on.
    // here is an example of what you could do with it:
    alert("Error in " + url + " at " + lineNumber + ":\n" + errorMsg);
}

但这只会显示错误消息。它不会显示任何警告消息。

是否有类似的方法来检测 console.log 中的特定警告消息?或者,是否有一些 JS 代码可以让我在 console.log 中搜索特定字符串?

请注意,我可以在浏览器的调试(控制台日志记录)窗口中看到警告消息。但我想“拦截”警告消息并在发现警告时执行一些操作。

已添加

目的是找出特定警告消息何时出现;该消息类似于"Loading failed for the <script> with source "https://www.example.com/js/somescript.js" .

但是如何拦截浏览器输出的警告消息(不是错误;我包含的代码就是这样做的)的问题(不是我的代码)。

已添加

所以,这就是我需要的。假设这段代码

console.warn("Here is a warning!");

您会编写什么代码来查看该消息是否作为警告写入控制台?

【问题讨论】:

  • 猴子补丁console.warn?不过,这似乎是一件很奇怪的事情
  • Listening console.log的可能重复
  • 不;我相信,“可能重复”并没有回答我关于如何“拦截”(或“感知”)console.warn 消息的问题。
  • 老兄,你只是覆盖console.warn 它与上面的帖子相同,除了它是console.log
  • console.warn 将警告消息写入控制台。我需要在写入警告消息时进行拦截。您可以使用自己的 console.log 函数拦截 console.logs,但我还没有弄清楚如何查找 console.warn 消息。用我有限的 JS 知识/测试创建自己的 console.log 函数是不行的。

标签: javascript


【解决方案1】:

您所说的警告是由浏览器生成的,而不是console.warn。这就是为什么你不能覆盖它。最有可能的是,您需要为所需的每个事件手动添加侦听器。例如,如果您想处理脚本加载错误,请使用 onerror 事件:

<script src="https://www.example.com/js/somescript1.js" onerror="console.log('Cannot load script from ' + this.src)"></script>
<script src="https://www.example.com/js/somescript2.js" onerror="console.log('Cannot load script from ' + this.src)"></script>

【讨论】:

    【解决方案2】:

    如何覆盖console.log()

    let tmpConsoleLog = console.log;
    console.log = function(msg){
        // Intercept code goes here using msg variable
        alert(msg);
        // then perform the normal logging
        tmpConsoleLog(msg);
    }
    
    console.log("Something");

    【讨论】:

    • 这似乎只是在编写 console.log 消息时做一些事情。虽然可能有代码可以检查味精是否是某个字符串?
    • 什么意思?你可以把任何你想要的拦截代码放在函数中,而不是我的 alert() 这里。
    • True @holydragon,但我需要测试“msg”何时包含特定值。而且我认为 console.log 只“保存”错误消息,而不是警告消息。
    • 你的意思是console.warn()
    • @RickHellewell 您可以简单地将本代码示例中的所有.log 实例替换为.warn,然后将alert(msg); 代码替换为if (msg === "ABC") { /* ... do something here */ } else { /* ... do something else. */ }。应该很容易弄清楚。祝你好运! :)
    【解决方案3】:

    已经很晚了,但这里的答案实际上直接回答了您的问题。

    var originalConsoleWarn = console.warn;
    console.warn = function(message) {
      doSomethingWithWarn(message);
      originalConsoleWarn(message);
    };
    
    function doSomethingWithWarn(message){
      console.log("DOING SOMETHING WITH: " + message);
    }
    
    console.warn("hi");

    【讨论】:

      猜你喜欢
      • 2020-09-03
      • 1970-01-01
      • 2019-08-18
      • 2021-10-12
      • 2023-03-16
      • 1970-01-01
      • 2017-01-17
      • 2019-12-28
      • 2020-03-06
      相关资源
      最近更新 更多