我试图在脚本完全加载后执行某些操作。 (IE8)动态创建脚本:readyState永远不会“完成”
脚本我用来测试:http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js
和无效之一:http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.minaaaaaaaa.js
代码...
var script = create the element and append to head...
// this works fine with FF/Chrome/...
script.onload = function() {alert('script loading complete');}
script.onerror = function() {alert('error loading script');}
// and for IE
script.onreadystatechange = function() {
// this will alert 1.loading 2.loaded
alert(this.readyState);
// this never works
if(this.readyState == 'complete') {alert('script loading complete');}
// this works with either a valid or INVALID url
else if(this.readyState == 'loaded') {alert('script loaded');}
};
在我的情况下, “完整” 永不显示,即使网址无效,“已加载”也会显示。因此无法判断脚本是否正确加载到UNDER IE中。
我做错了什么?我怎么从来没有得到完整的状态?
UPDATE
OK,我只是看了一些文章,似乎readyState为不检测脚本加载的可靠方法。
那么还有其他的方法吗?没有jQuery,但纯Javascript。
我不确定你想要做什么,但我建议寻找'jQuery#getScript'来获得如何动态加载脚本的想法。最重要的是,使用AJAX模式可以让您测试HTTP错误,因为您似乎想到了这一点。这不能 - afaik - 可以使用'script'标签上的DOM'Events'完成。 – FK82
感谢您的输入,FK82。我只是想100%确定该脚本已加载。正如我所说的,在FF/Chrome中,onload和onerror完美工作。但在IE下,即使脚本url无效(或可能超时),readyState仍会返回加载。我想使用纯Javascript的原因是因为我想确保jQuery从CDN首先正确加载,然后使用jQuery来做东西。是的,我也发现这应该采用AJAX的方式。 (还没有尝试寿) – pepsi600
请看看我的答案。您将能够使用AJAX/XHR('XMLHttpRequest')模式捕获各种HTTP错误。另外,我相信这在跨浏览器兼容性方面会更稳定。 – FK82