我正在尝试使用以下代码加载动态脚本:
var headID = document.getElementsByTagName("head")[0];
var script = document.createElement('script');
script.type='text/javascript';
script.src="js/ordini/ImmOrd.js";
script.setAttribute("onload", "crtGridRicProd();");
headID.appendChild(script);
Run Code Online (Sandbox Code Playgroud)
我需要在页面启动时启动crtGridRicPrdo()函数,并且在FireFox中一切正常但在Internet Explorer中我遇到了问题!
Internet Explorer不支持脚本标记上的"onload",而是提供"onreadystatechange"(类似于xhr对象).您可以通过以下方式检查其状态:
script.onreadystatechange = function () {
if (this.readyState == 'complete' || this.readyState == 'loaded') {
crtGridRicProd();
}
};
Run Code Online (Sandbox Code Playgroud)
否则你可以在你的js文件的末尾调用crtGridRicProd()
编辑
例:
test.js:
function test() {
alert("hello world");
};
Run Code Online (Sandbox Code Playgroud)
index.html的:
<!DOCTYPE html>
<html>
<head>
<title>test</title>
</head>
<body>
<script>
var head = document.getElementsByTagName("head")[0] || document.body;
var script = document.createElement("script");
script.src = "test.js";
script.onreadystatechange = function () {
if (this.readyState == 'complete' || this.readyState == 'loaded') {
test();
}
};
script.onload = function() {
test();
};
head.appendChild(script);
</script>
</body>
Run Code Online (Sandbox Code Playgroud)
您将在两个浏览器中看到警报!
我使用以下内容逐个加载脚本(async=false):
var loadScript = function(scriptUrl, afterCallback) {
var firstScriptElement = document.getElementsByTagName('script')[0];
var scriptElement = document.createElement('script');
scriptElement.type = 'text/javascript';
scriptElement.async = false;
scriptElement.src = scriptUrl;
var ieLoadBugFix = function (scriptElement, callback) {
if ( scriptElement.readyState == 'loaded' || scriptElement.readyState == 'complete' ) {
callback();
} else {
setTimeout(function() { ieLoadBugFix(scriptElement, callback); }, 100);
}
}
if ( typeof afterCallback === "function" ) {
if ( typeof scriptElement.addEventListener !== "undefined" ) {
scriptElement.addEventListener("load", afterCallback, false)
} else {
scriptElement.onreadystatechange = function(){
scriptElement.onreadystatechange = null;
ieLoadBugFix(scriptElement, afterCallback);
}
}
}
firstScriptElement.parentNode.insertBefore(scriptElement, firstScriptElement);
}
Run Code Online (Sandbox Code Playgroud)
像这样使用它:
loadScript('url/to/the/first/script.js', function() {
loadScript('url/to/the/second/script.js', function() {
// after both scripts are loaded
});
});
Run Code Online (Sandbox Code Playgroud)
脚本包含的一个错误修正是IE的延迟错误.
| 归档时间: |
|
| 查看次数: |
14436 次 |
| 最近记录: |