【问题标题】:IE8 forces compatibility mode when inserting data into a div将数据插入 div 时 IE8 强制兼容模式
【发布时间】:2010-09-01 00:47:04
【问题描述】:

我整天都在与 IE8 的兼容模式作斗争,我要扔砖头了。

我有一些代码,它使用 jquery 1.2(是的,它很旧 - 无法更改),在我们的网络应用程序中搜索一些记录。可以点击搜索结果来查看记录的内容(通过使用 .animate() 它在行下打开一个空间并在下面创建另一个 TR 并插入来自 json 提要的 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 文件(带有&lt;html&gt;&lt;/html&gt; 标签等)。这也会影响它吗?
编辑 3:删除这些重复的标签并不能解决问题。

编辑 2:仍然没有解决这个问题。它只是 IE8 无法正确显示并将其归结为浏览器怪癖的那些事情之一吗?我非常感谢您对此的帮助。

【问题讨论】:

  • 您确定您设置了正确的文档类型吗?也许有什么东西弄乱了它。
  • 嵌套的 html 文件实际上是指带有完整 标签的文件吗?如果是这样,我会删除这些,以便您只加载页面片段。在很多方面,IE 的解析器比 FF/Chrome 更严格。这很可能就是这样一种情况。
  • @Damo,是的,因为内部 HTML 文件是一个单独的模板文件(例如 searchcontent.html,其中主模板是assessment.html)。我想知道这一点,我会试一试。
  • @Damo,不幸的是,这也没有解决它。

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


【解决方案1】:

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

如果是这样,这意味着您在 IE 中遇到了错误。称为“硬断言”,它意味着布局引擎崩溃(不是 AV 或任何令人兴奋的东西,它只是进入了不可恢复的状态),因此 IE 尝试通过使用旧版布局引擎。

如果问题在 IE9 中仍然存在,请在http://connect.microsoft.com/ie 提交错误

谢谢!

【讨论】:

  • 是的,就是这样。我会试试 IE9,看看它是否在那里工作。
  • 刚刚让 IE9 和 Windows 7 对此进行了测试,它可以很好地呈现内容。感谢您的帮助。
【解决方案2】:

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

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

然后在 &lt;head&gt; 之后添加这个

<meta http-equiv="X-UA-Compatible" content="IE=8">

【讨论】:

  • 这是我检查过的一件事,但事实并非如此。但是,将其更新为该文档类型并没有解决任何问题。添加兼容性标签会使其完全停止工作。当您单击以显示预览时,它会将屏幕擦除,就像 IE 已锁定一样(光标在进入窗口之前从最后一种类型持续存在)。我还用一些额外的信息更新了这个问题。
【解决方案3】:

在一位同事也进行了一些搜索之后,我们发现了这个here on SO,已确认 max-height 在 IE8 中导致了一个硬断言,确认它确实是 EricLaw 发布的 IE8 中的一个错误。

我们将 max-height 用于插入内容的 div 的样式,进而导致硬断言。上面链接的问题可以解决遇到此问题的其他任何人。

【讨论】:

    猜你喜欢
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    相关资源
    最近更新 更多