我正在使用JavaScript动态加载jQuery。对于加载jQuery,定义了回调函数,并在其回调函数调用中执行一些jQuery操作。
在预期的Firefox,Chrome和IE9中运行良好,但在IE8中提供错误消息,如“$未定义”表示在IE8中存在回调函数执行问题。我花了一整天的时间来找到解决方案,但没有采取任何办法。
<body>
<script language="javascript" type="text/javascript">
function loadjQuery(callback) {
var ver = getInternetExplorerVersion();
var body = document.getElementsByTagName('body')[0];
var script = document.createElement('script');
script.type = 'text/javascript';
if (ver == 8.0) {
script.onload = callback.call();
}
else {
script.onload = callback;
}
script.src = 'http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js';
body.appendChild(script);
}
loadjQuery(function () {
alert($(window).height());
});
function getInternetExplorerVersion() {
var rv = -1;
if (navigator.appName == 'Microsoft Internet Explorer') {
var ua = navigator.userAgent;
var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
if (re.exec(ua) != null)
rv = parseFloat(RegExp.$1);
}
return rv;
}
</script>
</body>
我完全陷入困境。任何帮助都会明显吗?
答案 0 :(得分:1)
我以前也编写了这个函数,下面的代码看起来很完美:
// Attach handlers for all browsers
script.onload = script.onreadystatechange = function() {
if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) {
done = true;
// callback function provided as param
if(success != null)
{
success();
}
script.onload = script.onreadystatechange = null;
//head.removeChild(script);
};
};