要在内容脚本中加载模块,我使用以下代码(来源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 时似乎在使用上述代码的不同变体,因此必须有一种简单的方法可以在调试控制台中获取更多信息,我只是不知道那是什么:)。
谢谢你的帮助!!
更新 4/1:将上面的 eval() 语句更改为使用 Function() 似乎已经解决了问题,因为 chrome 控制台添加了附加信息。(这项工作的功劳归于这个问题)。
我意识到这两个功能不是完全可以互换的(见这个问题)。如果有人知道在上面的代码中使用 Function() 而不是 eval() 的任何陷阱,请告诉我!