我想从书签加载一个JS文件。这个JS文件包含以下代码来封装模块:
(function (root, factory) {
if (typeof module === 'object' && module.exports) {
// Node/CommonJS
module.exports = factory();
} else if (typeof define === 'function' && define.amd) {
// AMD. Register as an anonymous module.
define(factory);
} else {
// Browser globals
root.moduleGlobal = factory();
}
}(this, function factory() {
// module script is in here
return moduleGlobal;
}));
因此,如果网页使用RequireJS,当它加载时脚本不会导出全局变量。为了解决这个问题,我临时将 define
设置为 null
,加载脚本,然后将 define
重置为其原始值:
function loadScript(url, cb) {
var s = document.createElement('script');
s.src = url;
s.defer = true;
var avoidRequireJS = typeof define === 'function' && define.amd;
if (avoidRequireJS) {
var defineTmp = define;
define = null;
}
s.onload = function() {
if (avoidRequireJS) define = defineTmp;
cb();
};
document.body.appendChild(s);
}
这可以工作,但我感觉当其他应用程序部分可能依赖它时更改全局变量可能会有问题。有更好的方法吗?
define
本地重新分配给该函数。 - Dheeraj Vepakomma(function(define){
...})();
包装它。如果我找不到更简单的方法,你可以发布答案,我会接受它。 - Web_Designertext
属性的新的<script>
元素中。 - Web_Designer