麻烦调试内容脚本在chrome扩展使用require.js

Trouble debugging content scripts in a chrome extension using require.js

本文关键字:扩展 require js chrome 调试 脚本 麻烦      更新时间:2023-09-26

要在内容脚本中加载模块,我使用以下代码(来源http://prezi.com/rodnyr5awftr/requirejs-in-chrome-extensions/):

require.load = function (context, moduleName, url) {
    var xhr;
    xhr = new XMLHttpRequest();
    xhr.open("GET", chrome.extension.getURL(url) + '?r=' + new Date().getTime(), true);
    xhr.onreadystatechange = function (e) {
        if (xhr.readyState === 4 && xhr.status === 200) {
            eval(xhr.responseText);
            context.completeLoad(moduleName)
        }
    };
    xhr.send(null);
};

问题发生在通过Chrome控制台调试时。每当在我的一个模块中出现错误时,它只是报告匿名函数中发生的错误,但不会告诉我错误发生在该模块中的哪个require.js模块或行,而是始终指向上述脚本中的eval行。

由于很多人似乎在使用require.js与chrome扩展时使用上述代码的不同变体,必须有一个简单的方法来获得更多的信息在调试控制台,我只是不知道那是什么:)。

谢谢你的帮助!

UPDATE 4/1:改变上面的eval()语句使用Function()似乎已经解决了chrome控制台添加了附加信息的问题。(这项工作的功劳归于这个问题)。

我意识到这两个函数不是完全可以互换的(参见这个问题)。如果有人知道在上面的代码中使用Function()而不是eval()有任何缺陷,请让我知道!!

您可以更改

        eval(xhr.responseText);

        eval(xhr.responseText + "'n//@ sourceURL=" + url);