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

时间:2016-11-01 17:10:29

标签: javascript google-chrome google-chrome-extension content-script

我正在使用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调用的......?

1 个答案:

答案 0 :(得分:1)

如果错误称为运行时错误,那么,当代码运行时发生

您的脚本只是声明 onYouTubePlayerReady但实际上并没有运行它(以后它应该由别人运行)。因此,您无法看到运行时错误:不是任何错误。爱好。

相反,语法错误是分析时错误。因此,无论如何,你都会看到它们。

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

如果您确定代码已执行,可能会使页面(或YT API)具有全局异常处理程序,从而使运行时错误无效。在这种情况下,您可以尝试在代码中包含try...catch,以便在异常冒出之前捕获并记录异常。