Javascript script.readyState在IE11&;中未定义;FF
我刚刚开发了一个动态脚本加载器,它在IE9中运行良好,但在IE11和FF中都没有 这是我的密码:Javascript script.readyState在IE11&;中未定义;FF,javascript,internet-explorer-11,Javascript,Internet Explorer 11,我刚刚开发了一个动态脚本加载器,它在IE9中运行良好,但在IE11和FF中都没有 这是我的密码: function getResourceScript(filename) { var script = document.createElement('script'); script.setAttribute('src', mShuttlePath + "scripts/" + filename); script.setAttribute('type', 'text/jav
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");
函数getResourceScript(文件名)
{
var script=document.createElement('script');
setAttribute('src',mShuttlePath+“scripts/”+文件名);
setAttribute('type','text/javascript');
setAttribute('language','javascript');
document.getElementsByTagName('head')[0].appendChild(脚本);
}
函数documentLoadInit()
{
如果(document.readyState=='complete')
{
//检查是否已加载所有脚本
对于(var n=0;n有什么想法吗?事实上,我想你是在问文件准备好之前是否已经准备好了。您需要设置一个状态更改侦听器,并在每次文档状态更改时进行检查
document.onreadystatechange = function () {
if (document.readyState == "complete") {
initApplication();
}
}
阅读文档:实际上,我想你是在问文档是否在准备好之前就准备好了。您需要设置一个状态更改侦听器,并在每次文档状态更改时进行检查
document.onreadystatechange = function () {
if (document.readyState == "complete") {
initApplication();
}
}
阅读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);
}
该函数将测试作为参数。既然你是应用程序的设计者,你就会知道什么是成功的测试。一旦此测试为真,它将执行回调。来自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);
}
该函数将测试作为参数。既然你是应用程序的设计者,你就会知道什么是成功的测试。一旦此测试为真,它将执行回调。在脚本元素上使用
onload
事件。最后,您只想检查是否已加载所有脚本?在脚本元素上使用onload
事件。最后,您只想检查是否已加载所有脚本?+1@Kovu不轮询状态更改,为此使用事件。javascript已经覆盖了+1@Kovu。不要轮询状态更改,使用事件进行更改。javascript已经介绍过了吗