【发布时间】:2015-10-28 12:20:28
【问题描述】:
当我的外部脚本完成加载后,DOM 是否总是准备就绪?
<head>
<script type="text/javascript" src="base.js"></script>
</head>
在 base.js 中,我有一个加载外部脚本的对象。它使用以下方法来做到这一点:
var head = document.getElementsByTagName("head")[0],
scriptElement = document.createElement("script");
scriptElement.type = "text/javascript";
scriptElement.onreadystatechange = function () {
if (this.readyState === "complete") onModuleLoaded();
};
scriptElement.onload = onModuleLoaded;
scriptElement.src = "externalScript.js";
head.appendChild(scriptElement);
现在,当所有外部脚本都加载完毕后,就会调用回调函数。我的问题是:这个回调函数是否适合放置 我的javascript代码的其余部分在哪里?此代码需要准备好 DOM。
我的脚本也使用 jQuery。但我不认为我可以使用
$(document).ready(function () { ... });
因为在我的脚本加载之前触发的测试。但是,我不知道这是否会一直如此。如果可以,我的回调函数就适合我的 DOM 操作 javascript 代码。
但如果我的脚本可以在 DOM 准备好被操作之前加载,我需要找到另一种方法。
感谢您的阅读!
【问题讨论】:
-
始终在 html 文件的末尾包含您的以及外部的 js 文件。即在结束正文标记之前,并在最后包含用户脚本文件。
-
如果您使用的是 jQuery,为什么不使用
$.getScript而不是自己解决浏览器不一致问题(onreadystatechange与onload)?此外,IIRC,有些浏览器会触发 both,因此您可以收到两次对onModuleLoaded的调用;如果你不切换到getScript,你可能需要一个标志(如果你还没有)。 -
我不知道 $.getScript 方法,我对 jQuery 很陌生。虽然也许我应该更好地搜索 jQuery 解决方案。下次我会的。
标签: javascript external document-ready