【发布时间】:2016-12-19 12:59:12
【问题描述】:
我正在使用以下函数将脚本加载到 HTML 文件中,
function addScript(src){
var script = document.createElement('script');
var location = "javascripts/";
src =location + src;
script.setAttribute('src', src);
document.body.appendChild(script);
};
addScript('george.js');
addScript('fred.js');
addScript('main.js')
但是,它似乎能够加载太大的文件(如 200 行)。例如,如果 george.js 有一个 George 类,并且文件太长,则尝试创建新的 George() 将失败。
我确信这是一个加载大小问题,原因如下:
1) 如果我从 george.js 中注释掉几乎所有内容,新 George 仍然会失败。
2) 如果我从 george.js 中删除任何 10 个函数,new George 就会成功。
3) 如果我将新 George 拆分为 2 个文件,它会成功
4)。如果我在 fred.js 中添加大量 cmets,new Fred 会失败。
5)明确一点,george.js 可以
function George(){};
我可以打电话:
var george = new George();
在我的文件中。但是,如果 george.js 变成了
function George(){};
/*
(Insert hundreds of lines of comments here)
*/
代码
var george = new George();
会导致
ReferenceError: George is not defined
为什么这个函数在加载大约 200 行的文件时遇到问题?我能做些什么来解决这个问题?
编辑:
尝试使用 window.setTimeout 函数。
AfterTimeout = function(){
var george = new George();
}
window.setTimeout(AfterTimeout , 3000);
这似乎确实有效。
我最终通过设置 script.async = false; 使其工作。
【问题讨论】:
-
fred 或 george 是否依赖访问 DOM 中的任何内容?
-
开发者工具控制台中的任何错误
-
Derp,我不确定你的意思。
-
此外,除了“未声明 HTML 文档的字符编码”和“参考错误:未定义 Fred”之外,没有其他错误
-
我的猜测是因为加载一个 JavaScript 文件需要时间,你会希望仅在该文件完全加载后才使用这些函数。尝试在几秒钟内运行
setTimeout,看看是否是导致问题的原因。
标签: javascript html