我试图动态插入和执行一些脚本,我想我正在碰到一个竞争条件,第二个尝试在第一个被加载之前执行。如何才能延迟脚本块的执行,直到外部脚本加载完成为止?
我正在处理的项目有一个不寻常的要求:我无法修改该页面的HTML源代码。它被编译成应用程序用于本地化目的。
因此,我无法插入像我通常会在JavaScript文件中链接的<script>
标签。
事实证明,客户希望使用托管的网页字体,因此我决定在已链接的JavaScript文件中动态构建并追加两个必需的<script>
标签。
的<script>
块在文档的head
正确追加,但在第二块功能似乎被解雇之前,在第一<script>
标签链接的外部脚本是满载,它抛出一个undefined
错误。
下面是相关的代码:
document.getElementsByTagName("head")[0];
var tag = document.createElement('script');
tag.setAttribute("src", "http://use.typekit.com/izj3fep.js");
document.getElementsByTagName("head")[0].appendChild(tag);
try {
Typekit.load(); // This is executing too quickly!
} catch(e){
console.log("Hosted fonts failed to load: " + e);
}
我试过try
块移动到window.onload
事件,但在此之前,此代码的任何火灾被调用。
我想我可以动态加载jQuery,然后使用它的ready
事件,但这看起来很笨拙。由于客户端有很多自定义JavaScript可能会与此项目发生冲突,因此我不愿意在此项目中添加一个库。
我还能试试吗?
小心,虽然,这是古怪的... http://unixpapa.com/js/dyna.html(ie的旧版本似乎使用onreadystatechange替代) – benesch 2012-01-05 03:40:16
这是在Chrome中工作。我似乎无法让'tag.onreadystatechanged'在IE7或IE8中触发。有什么建议吗?我好亲近 – 2012-01-05 13:17:24