使用require.js调试chrome扩展中的内容脚本时遇到问题

时间:2013-03-31 17:01:05

标签: javascript google-chrome-extension requirejs

要在内容脚本中加载模块,我使用以下代码(来源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行。上面的剧本。

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

感谢您的帮助!!

UPDATE 4/1:更改上面的eval()语句以使用Function()似乎解决了问题,因为chrome控制台添加了附加信息。 (这项工作的功劳归于此question)。

我意识到这两个功能并不是完全可以互换的(见this question)。如果有人知道在上面的代码中使用Function()而不是eval()的任何陷阱,请告诉我!!

1 个答案:

答案 0 :(得分:4)

您可以更改

        eval(xhr.responseText);

通过

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

通过这种方式,您可以在原始网址下看到源代码面板中列出的所有恶意代码。