我一直遇到Firefox没有执行通过外部脚本动态加载的JavaScript文件的问题。
让我解释一下。
我有以下HTML文件:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Restive.JS</title>
<meta name="keywords" content="">
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="text/javascript" src="assets/js/load.js"></script>
</head>
<body>
<h1>Loading JavaScript</h1>
</body>
</html>
在我的 load.js 文件中,我有以下代码:
document.addEventListener("DOMContentLoaded", function() {
function loadScript(url) {
var script = document.createElement("script");
script.src = url;
document.getElementsByTagName("head")[0].appendChild(script);
}
var list_arr = ['assets/js/test1.js', 'assets/js/test2.js'];
for (var i = 0; i < list_arr.length; i++) {
loadScript(list_arr[i]);
}
});
在 test1.js 和 test2.js 中,我有console.log('test1.js is loaded!');
和console.log('test2.js is loaded!');
。
问题是加载了 test1.js 和 test2.js (我可以通过检查查看<head>
中的两个文件),但它们是从未执行过(因为控制台日志中没有消息)。
然而,当我通过内联JavaScript更改原始HTML中的脚本引用格式时,即从中改变:
<script type="text/javascript" src="assets/js/load.js"></script>
到此:
<script>
document.addEventListener("DOMContentLoaded", function() {
function loadScript(url) {
var script = document.createElement("script");
script.src = url;
document.getElementsByTagName("head")[0].appendChild(script);
}
var list_arr = ['assets/js/test3.js', 'assets/js/test4.js'];
for (var i = 0; i < list_arr.length; i++) {
console.log('i = ' + i);
loadScript(list_arr[i]);
}
});
</script>
然后加载并执行脚本。
我在Chrome或Safari中看不到这种行为,只有Firefox。此外,内联不是一种选择,因为此功能是内置于用户必须通过外部链接引用的库。
这是一个可修复的问题吗?
修改
我使用Firefox 46.0.1在Mac OSX 10.10.5上