动态加载脚本

Vit*_* Py 5 html javascript yui javascript-events

我正在我的代码中动态加载一些YUI脚本以响应Ajax请求.在发出请求时,DOM和页面被完全加载 - 这是对用户事件的响应.

作为孩子,我将标签添加到头部.但我偶然发现了一些问题:

我在Yahoo!上添加了两个YUI脚本.CDN和我自己的内联脚本负责创建对象,添加事件侦听器和呈现YUI小部件.但是,当我的脚本运行YUI脚本时,我没有加载但是给我错误而没有按照我的预期运行.

当YUI脚本完全加载时,有一种方法只运行我的脚本(或定义一个要运行的函数)?

tco*_*ooc 18

你有没有尝试过onload事件?

编辑:(感谢杰米)

var script = document.createElement("script");
script.type = "text/javascript";
script.src = src;
//IE:
if(window.attachEvent && document.all) {
    script.onreadystatechange = function () {
        if(this.readyState === "complete") {
            callback_function(); //execute
        }
    };
}
//other browsers:
else {
    script.onload = callback_function; //execute
}
document.getElementsByTagName("head")[0].appendChild(script);
Run Code Online (Sandbox Code Playgroud)

  • 虽然这可能在某些浏览器中有效,但就我所知,`script`元素不需要有onLoad事件处理程序 - http://www.w3schools.com/tags/tag_script.asp (3认同)
  • 除了IE之外的所有浏览器都有一个`onload`事件(有点可预测).在IE中,您需要一个回退`onreadystatechange`功能. (2认同)

Jam*_*ong 1

您可以使用 asetTimeout()来运行一些仅检查它是否已加载的函数 - 检查类似

if (typeof YUI_NAMESPACED_THING !== "undefined") runCode()

编辑谢谢,CMS

  • `typeof` 运算符*总是*返回一个字符串,检查应该是 `if (typeof YUI_NAMESPAED_THING != "undefined") //...` (2认同)
  • 这是错误的做法。首先,您可能会想到 setInterval 或链式 setTimeout,因为单个 setTimeout 要么 A) 延迟执行时间太长,导致不必要的页面设置时间过长,要么 B) 假设脚本将在一个脚本中加载而创建的竞争条件失败。一定的时间。基于 onload/onreadystatechange 解决方案的东西更好。 (2认同)