将数据插入div时,IE8强制执行兼容模式

时间:2010-09-01 00:47:04

标签: jquery internet-explorer-8 ie-developer-tools jquery-animate ie8-compatibility-mode

我一整天都在与IE8的兼容模式作斗争,而且我正要在它上面扔砖头。

我有一些代码,它使用jquery 1.2(是的,它是旧的 - 不能改变它),在我们的网络应用程序中搜索一些记录。可以单击搜索结果以查看记录的内容(通过使用.animate(),它会在行下面打开一个空格,并在下面创建另一个TR并从json feed中插入HTML数据)。

在IE8中,单击结果以查看内容会强制它在兼容模式下重新加载,在所有其他浏览器(IE7,FF3.0 +,Chrome,Safari)中它可以正常工作。我一直在尝试使用IE8的开发人员工具栏来调试和追踪发生这种情况的原因,但我无法找到任何错误或任何可能导致错误的证据。

显示预览的代码:

// Code that binds a click to open the result preview:
var _tr = $('<tr class="outline" id=' + val.assessment.assessmentId + '></tr>').bind("click", msi.reuseAssessment.preview);

...

// in msi.reuseAssessment.preview()
var url = "/direct/msi-assessment/" + assessmentId + "/assessmentHtml.json?no-cache=true";
jQuery.ajax({
    type: "GET",
    url: url,
    dataType: "json",
    success: function(d, textStatus){
        var _content = d.assessmentHtml;
        var _preview = $("<tr id=" + assessmentId + "></tr>");

        // loadContent 
        _tr.after(_preview.animate({
            height: 50
        }, 500, 0, function() {
            msi.reuseAssessment.drawPreview(this, _content); // Puts the content from the json into a td
        }));
    },
    error: function(xmlHttpReq, status, errorThrown) {
        // display error msg
    }
});

使用IE8的开发人员工具逐步执行代码,它会在此处传递到jQuery的代码中,并且在兼容模式下刷新。我已经验证了JSON,w3c提供的HTML代码,一切都很好,我真的不知道发生了什么。

有谁知道如何更好地追踪导致它的原因,还是我应该在这些页面上强制使用IE7模式?

编辑:搜索是在屏幕顶部显示的ajax“弹出窗口”中执行的。它的模板(基本HTML)从单独的HTML文件加载,并注入原始页面底部的div。这意味着会有嵌套的HTML文件(带有<html></html>标签等)。这会影响它吗?
编辑3:删除这些重复的标签并没有解决问题。

编辑2:还没有解决这个问题。它只是其中一个IE8无法正常显示并将其归结为浏览器的怪癖吗?我真的很感激你的帮助。

3 个答案:

答案 0 :(得分:4)

通过强制它以兼容模式重新加载你的意思是你得到一个弹出气球通知,上面写着:“Internet Explorer遇到了这个页面的问题并且已经在兼容模式下加载了它” ?

如果是这样,那就意味着你已经在IE中遇到了一个错误。被称为“硬断言”意味着布局引擎崩溃(不是AV或任何令人兴奋的东西,它只是进入一个不可恢复的状态)因此IE尝试通过使用以下方式为用户提供一些内容较旧的布局引擎。

如果问题仍然出现在IE9中,请在http://connect.microsoft.com/ie

提交错误

谢谢!

答案 1 :(得分:3)

您是否确保您的DOCTYPE和X-UA兼容正确

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

然后在<head>

之后添加
<meta http-equiv="X-UA-Compatible" content="IE=8">

答案 2 :(得分:2)

在一位同事做了一些搜索之后,我们发现了这个here on SO,其中已经确认max-height在IE8中引起了一个硬断言,确认它确实是IE8中的一个错误,如EricLaw发布。

我们使用max-height作为我们插入内容的div的样式,反过来导致硬断言。以上链接的问题可以解决其他遇到此问题的问题。