如何捕获从 Chrome 扩展以编程方式注入的 JavaScript 中的错误?

How do I catch errors in a JavaScript programmatically injected from a Chrome Extension?

我正在使用 Chrome 扩展的内容脚本以编程方式注入另一个可以访问网页变量和 DOM 的内容脚本。我在 YouTube 上这样做是为了等待 onYouTubePlayerReady 活动。

所以,我有文件 content_script.js,其中包含:

var s = document.createElement('script');
s.src = chrome.extension.getURL('src/js/content_script_inject.js');
(document.head||document.documentElement).appendChild(s);
s.onload = function() {
    s.parentNode.removeChild(s);
};

和文件 content_script_inject.js,它在网页本身上执行操作。在我注入的内容脚本中,我正在等待 onYouTubePlayerReady 事件

function onYouTubePlayerReady(playerId) {
  foo(); // <-- function not defined, error does not show in console
}
foo(); // <-- error shows in console

如果运行时错误是由调用不存在的函数引起的,例如上述情况下的 foo(),当从内部调用时,我不会在控制台上看到此错误功能。

那么:如何在编程时捕获此 JavaScript 中产生的错误?我假设这是因为该函数是从 YouTube JavaScript 而不是…?

调用的

错误称为 运行time 错误,如果,好吧,它发生在 代码为 运行.

您的脚本仅 声明 onYouTubePlayerReady 但实际上并没有 运行 它(它应该是 运行 之后的其他内容)。因此,您看不到 运行 时间错误: 没有。然而

相比之下,语法错误是解析时错误。因此,无论如何您都会看到它们。


请注意,在您的特定情况下,您没有看到错误这一事实可能意味着 YouTube API 要么已经尝试调用该函数,要么从未真正尝试过。您可能希望将 run_at 内容脚本参数设置为 "document_start" 以排除第一种可能性。

如果您确定代码得到执行,页面(或 YT API)可能有一个全局异常处理程序 可以使 运行时间错误。在这种情况下,您可以尝试在代码中包含 try...catch 以在异常冒泡之前捕获并记录异常。