要在内容脚本中加载模块,我使用以下代码(来源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()的任何陷阱,请告诉我!!
答案 0 :(得分:4)
您可以更改
行 eval(xhr.responseText);
通过
eval(xhr.responseText + "\n//@ sourceURL=" + url);
通过这种方式,您可以在原始网址下看到源代码面板中列出的所有恶意代码。