script.readyState未定义在IE11和FF
我刚刚在一个动态脚本加载器在IE9中正常工作,但不是在IE11中,而不是在FF中。script.readyState未定义在IE11和FF
这里是我的代码:
function getResourceScript(filename)
{
var script = document.createElement('script');
script.setAttribute('src', mShuttlePath + "scripts/" + filename);
script.setAttribute('type', 'text/javascript');
script.setAttribute('language', 'javascript');
document.getElementsByTagName('head')[0].appendChild(script);
}
function documentLoadInit()
{
if (document.readyState == 'complete')
{
// check if all scripts are loaded
for (var n = 0; n < document.scripts.length; n++)
{
if (document.scripts[n].readyState != "complete" && document.scripts[n].readyState != "loaded")
{
setTimeout(documentLoadInit, 49);
return false;
}
}
Init();
}
else
{
setTimeout(documentLoadInit, 49);
}
}
getResourceScript("core/core.js");
getResourceScript("core/ajax.js");
这里的主要问题是,该script.readyState被丢弃在IE11 - 这么多,我发现了!
但是如何取代它呢?如何检查当脚本加载/完成时?
任何想法?
从MSDN:
注:脚本元素,不再支持
readyState
。从Internet Explorer 11开始,请使用onload
。有关信息,请参阅兼容性更改。
所以,不是检查的readyState
你可以使用这样的事情:
if (!script.addEventListener) {
//Old IE
script.attachEvent("onload", function(){
// script has loaded in IE 7 and 8 as well.
callBack();
});
}
else
{
script.addEventListener("load", function() {
// Script has loaded.
callBack();
});
}
而且,我敢肯定,你可以改善你的代码。而setInterval()
更适合这种情况。了解如何使用DOM事件一点点,如果你仍然有兼容性问题,这里的东西,你可以使用:
function loadExtScript(src, test, callback) {
var s = document.createElement('script');
s.src = src;
document.body.appendChild(s);
var callbackTimer = setInterval(function() {
var call = false;
try {
call = test.call();
} catch (e) {}
if (call) {
clearInterval(callbackTimer);
callback.call();
}
}, 100);
}
该函数将测试作为参数。既然你是应用程序的设计者,你就会知道什么是成功的测试。一旦这个测试成立,它将执行回调。
+1 @Kovu不会轮询状态更改,请为此使用事件。 javascript有你覆盖 – bottlenecked 2014-09-02 08:10:20
其实我认为你问的是文档在准备好之前是否准备好。您需要设置状态更改侦听器,并在每次文档状态更改时检查。
document.onreadystatechange = function() {
if (document.readyState == "complete") {
initApplication();
}
}
阅读文档:https://developer.mozilla.org/en-US/docs/Web/API/document.readyState
在脚本元素上使用'onload'事件。 – 2014-09-02 07:01:30
最后,你只是想检查是否所有的脚本加载? – 2014-09-02 07:22:17