我有一个页面在Firefox中工作得很好,但在IE中抛出了一个错误。我正在动态加载jQuery (如果它还没有加载),然后在jQuery(document).ready()块中做一些事情。但是,IE在命中jQuery(文档).ready()块时会抛出可怕的"Object expected“错误。
您可以在此处查看完整的页面代码:http://www.pastie.org/977767
IE在jQuery(文档).ready()上抛出了错误。
你有什么想法吗?同样,这在Firefox中运行得很好。IE似乎认为jQuery已经加载,但实际上还没有加载,或者当遇到jQuery(document).ready()块时,jQuery仍在加载?
发布于 2010-05-26 19:33:39
当您将脚本附加到文档时,它将被异步下载。在IE中,以下脚本...
try{
jQuery(document).ready(function() {
jQuery.getScript("/CalendarViewer/js/utils.js", function(){
jQuery.getScript("/CalendarViewer/js/groupcatselector.js", function(){
jQuery.getScript("/CalendarViewer/js/calendarportlet.js", function(){
jQuery.getScript("/CalendarViewer/js/calendarportletmain.js", function(){
var cpm = calendarportletmain;
cpm.doEditDefaults("V_7f208bca412b42a68c19eb104bf46f14", "/CalendarViewer", groupCats_V_7f208bca412b42a68c19eb104bf46f14);
});
});
});
});
});
}catch(err){
alert("error in view.jsp="+err.number+" "+err.description);
}在IE完成下载和解析jQuery脚本之前解析并执行...is。如果Firefox已经缓存了脚本,这可能不是Firefox的情况,下载它不需要时间,并且可以立即解析。它可能与解析器的工作方式不同,Firefox会在脚本下载后立即对其进行解析,而IE会将解析排队,直到线程空闲。
您可以将此代码移到setUpJquery函数的末尾,这意味着只有在jQuery对象可用时才会执行它。或者,您可以将代码放在它自己的函数中,然后从setUpJquery函数调用该函数。
发布于 2011-02-11 01:00:44
我绕过它的方式是:
$(document).ready( function () {
document_init();
});
function document_init() {
try{
checkDivLoaded();
[ ... do more stuff ... ]
} catch( err ) {
setTimeout('document_init()', 200);
}
}
function checkDivLoaded() {
if ( $('#targetDiv').length == 0) $jquery.error( 'not ready' );
}它不是很漂亮,但它很有效。它可以跨多个文件工作,在我能想到的(我关心的)每一个浏览器中,这意味着你不必弄乱父页面的源代码。这样你就可以不使用标签了。
https://stackoverflow.com/questions/2912451
复制相似问题