一尘不染

IE8-内容加载后如何运行jquery代码?

ajax

我有一种情况,我加载了一个父网页(可能是Java
JSP),该网页包含我正在使用文档就绪函数内的ajax(asynch)加载的内容,希望该页面能够快速呈现任何内容,然后运行jQuery代码以页面显示后执行紧急工作。

它按照预期在Firefox中正常工作-页面快速呈现,然后jquery代码运行ajax调用并加载其他元素。

在IE8中,它等待直到一切完成,然后呈现完成的结果。它不支持我的文档准备尝试。它位于此处,在“文档准备就绪”部分中运行我的代码时加载页面,然后最终所有内容的完成结果都会显示在浏览器中。

有什么解决方法吗?有什么办法可以使IE8在这方面表现得像Firefox …尽快渲染页面,然后在渲染后运行一些jquery代码/ ajax调用?


阅读 241

收藏
2020-07-26

共1个答案

一尘不染

这是一个会影响IE6 7和8的错误。jQuery的文档就绪处理程序只有在IE 6 7和8中的窗口加载事件之前或之后才会触发。在IE9中不会发生。

解决它的一种方法是自己处理事件。

<body class="jquerydomready">
    <!--[if lt IE 9]>
    <script>
        $('body').removeClass('jquerydomready');
    </script>
    <![endif]-->

然后在脚本中使用以下命令:

function init() {
    // code here will be ran when document is ready
    $("body").css("background-color","green");
}

if ( $("body").is(".jquerydomready") ) {
    $(init); // not oldIE
}
else {
    // oldIE way
    document.onreadystatechange = function() {
        if (document.readyState == "interactive") init();    
    }​
}

但是请记住,如果您正在执行ajax请求并期望它们能够快速发生,否则代码将无法正常工作,我建议您迁移到不需要它们快速发生的系统,因为您不能始终依赖网络快速。

票证:http :
//bugs.jquery.com/ticket/12282

目前,它实际上并未标记为错误,但是,如果您遵循此问题的历史记录,则在jQuery的整个开发过程中已对其进行了多次修复和未修复。

编辑:我不确定这个答案的IE6部分,我还没有对此进行过IE6测试。

这是支持性的JSFiddle,表明它在IE7和8中不正确地等待(再次在IE6中未测试)。

在上述修复之前:http :
//jsfiddle.net/PFWmS/

完成上述修复后:http :
//jsfiddle.net/PFWmS/7

2020-07-26