【发布时间】:2022-02-21 23:53:35
【问题描述】:
我只尝试加载一次大型 js 脚本。我没有在页面加载时加载它,因为那时不需要它并且会减慢页面加载速度。
所以我一直在尝试使用 jQuery 的 $.getScript 和 Modernizr.load 加载它(因为我已经在使用 Modernizr)。
我尝试遍历所有 <script></script> 元素并检查它们的 src 属性并查看此脚本是否是其中之一,但每次运行测试时仍会加载它们。
我还尝试在脚本开头将全局变量设置为 true 并检查是否已设置,并且每次检查时它仍会加载。 这是我在那个例子中所做的:
Modernizr.load({
test:if(window.flag === undefined),
yep:'conversation.js',
callback:function(){
antecedent();
}
});
var flag = true; 被设置在 conversation.js 的第一行
有没有人知道如何在调用此测试以检查它是否已加载并且只加载一次时如何让此脚本加载一次?
** 编辑/更新:** document.getElementsByTagName('head')[0].appendChild(document.createElement('script')).src = 'conversation.js'; 可以工作,但我如何检查脚本是否已加载,然后仅在尚未包含时才调用它?
【问题讨论】:
-
stackoverflow.com/questions/1878358/… 提到了使用其他库动态加载脚本的问题。与 vanilla JS 相同的解决方案会起作用吗?
-
@colonelsanders
document.getElementsByTagName('head')[0].appendChild(document.createElement('script')).src = 'conversation.js';可以工作,但我看不到它如何检查脚本是否已加载。是什么让它在再次调用时无法再次加载? -
@user3743069 让我明白你可以通过 $.getScript 加载脚本,并通过成功回调通知它已加载,问题出在哪里?
-
@ProllyGeek 当我尝试这样做时,例如在成功回调中将 var 设置为 true,它表示 var 未定义并再次加载。
-
使用
document.getElementsByTagName('script')对普通 JS 进行检查并迭代这些工作正常。如果这对您不起作用,那么我可能看不到某些内容,并且重新创建问题的代码笔会有所帮助
标签: javascript jquery