【发布时间】: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 文件(带有<html></html> 标签等)。这也会影响它吗?
编辑 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