要在内容脚本中加载模块,我使用以下代码(源http://prezi.com/rodnyr5awftr/requirejs-in-chrome-extensions/ 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 模块或该模块中的行,而是始终指向上面的脚本。
由于很多人在使用带有 chrome 扩展的 require.js 时似乎使用了上述代码的不同变体,因此必须有一种简单的方法可以在调试控制台中获取更多信息,我只是不知道那是什么:)。
感谢您的帮助!!
更新 4/1:将上面的 eval() 语句更改为使用 Function() 似乎已经解决了问题,因为 chrome 控制台添加了附加信息。 (这项工作的功劳归功于此question https://stackoverflow.com/questions/6684046/javascript-eval-method).
我意识到这两个功能不能完全互换(请参阅这个问题 https://stackoverflow.com/questions/4599857/is-eval-and-new-function-the-same-thing)。如果有人知道上面代码中使用 Function() 而不是 eval() 的任何陷阱,请告诉我!
你可以改变线路
eval(xhr.responseText);
by
eval(xhr.responseText + "\n//@ sourceURL=" + url);
这样,您将看到源代码面板中原始 url 下列出的所有评估代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)