gpt4 book ai didi

javascript - 如何使用字符串测试 JS 库是否已加载

转载 作者:行者123 更新时间:2023-11-28 19:09:02 24 4
gpt4 key购买 nike

我正在尝试编写一个简单的依赖项加载器,但在测试库以查看初始加载是否成功时遇到了麻烦。主要障碍似乎是由于我将每个库的 var 名称存储为字符串。

var libraries = [
{
libvar: 'jQuery',
cdn: '//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js',
fileName: 'jquery-2.1.4.min'
}, {
libvar: '_', // Underscore.js
cdn: '//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js',
fileName: 'underscore-1.8.3.min'
}
];

var checkLoad = function(library) {
if (!library || !library.fileName.length) return;

document.addEventListener('DOMContentLoaded', function() {
var thisLib = eval(library.libvar);
if (!thisLib) {
script = document.createElement('script');
script.setAttribute('src', 'js/fallback/' + library.fileName + '.js');
script.setAttribute('type', 'text/javascript');
document.body.appendChild(script);

console.warn(library.libvar + ' loaded via fallback', thisLib); // Testing
} else {
console.warn(library.libvar + ' is loaded!'); // Testing
}
});
};

for (var i = 0; libraries.length > i; i++) {
document.write(unescape("%3Cscript src='" + libraries[i].cdn + "' type='text/javascript'%3E%3C/script%3E"));
checkLoad(libraries[i]);
}

我收到的错误是:

Uncaught ReferenceError: jQuery is not defined

...其中“jQuery”只是我手动断开的链接的 eval(library.libvar) 名称。

如果脚本从 CDN 成功加载,则初始加载和测试工作正常。但是,如果我手动中断 cdn 链接,脚本应该尝试回退,但会抛出 js 错误并停止。

我正在努力弄清楚如何编写一个适当的测试,该测试将正确失败,而不会出现错误并停止一切。

<小时/>

根据 dbrin 的解决方案,固定的 DOMContentLoaded 函数如下所示:

document.addEventListener('DOMContentLoaded', function() {
if (!window[library.libvar]) {
var script = document.createElement('script');
script.setAttribute('src', 'js/fallback/' + library.fileName + '.js');
script.setAttribute('type', 'text/javascript');
document.body.appendChild(script);
}
});

最佳答案

这是一个例子:

if(window['jQuery']) {
// Hooray jQuery is loaded!
}

关于javascript - 如何使用字符串测试 JS 库是否已加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31080434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com