javascript - Javascript 文件加载回退。替代 document.write()
问题描述
您可能熟悉良好的旧 Jquery 负载回退:
<script>window.jQuery || document.write('<script src="https://example.com/jquery.js"></script>')</script>
但我在这里和那里读到:不要使用document.write
,对你的健康有害,它在 Chrome 上不起作用(它对我有用,Chrome 78)。
所以我试图替换它,但我无法找到在DOM
触发加载之前同步加载新 js 文件的解决方案。
操作替代方案的最终DOM
结果是浏览器认为DOM
已加载并且所有$(document).ready()
失败并显示“<em>$ is not defined”。
function Jqfallback() {
var j = document.createElement('script');
j.src = 'https://example.com/jquery.js';
document.getElementsByTagName('head')[0].appendChild(j);
}
(window.jQuery || Jqfallback() );
无论我把这个脚本放在哪里,或者新的 JS 文件,在这种情况下,它('head')[0]
已经在正文中的所有其他 JS 之前,它会“异步”加载它。
是否有其他选择,或者我document.write()
在 2019 年底继续摇摆?
解决方案
加载和解析 JQuery 需要一些时间。因此,在附加脚本后使用(小)超时。
此代码段将条件加载包装在立即执行的匿名函数中:
(myScripting => {
if (!window.$) {
let j = document.createElement('script');
j.src = '//code.jquery.com/jquery-3.4.1.slim.min.js';
document.querySelector('head').appendChild(j);
setTimeout( myScripting, 200 );
} else {
myScripting();
}
})(JqIsLoadedSoMyScriptingCanStart);
// put your main scripting in here
function JqIsLoadedSoMyScriptingCanStart() {
// extra check
if (!window.$) {
alert("Sorry, JQuery is not loaded, can't continue");
return;
}
console.log("JQuery in place?");
console.log($("head script")[1]);
}
<script src="cantLoadThis"></script>
推荐阅读
- wordpress - 从 localhost 到 Intranet 站点,使用 XAMPP 和 wordpress
- powershell - 命令输出打印而不是在 Powershell 中捕获
- node.js - 如何在 aws api 网关中传递和访问路径参数
- java - 有没有办法不在列表视图位置使用 getRef() 来获取当前点击用户的 getKey()?
- sas - SAS:proc reg 和宏
- git - 如何限制 git log 报告的提交范围?
- c - C编程为什么浮点值会改变
- javascript - 如何从 graphql 模式中获取所有类型的列表?
- android - Android 房间数据库 - 数据库文件为空
- sql - 使用 SQL Server 查询将 Excel 作为数据库