IE8 форсирует режим совместимости при вставке данных в div - PullRequest
3 голосов
/ 01 сентября 2010

Я боролся с режимом совместимости IE8 весь день, и я собираюсь бросить ему кирпич.

У меня есть некоторый код, который использует jquery 1.2 (да, он старый - его нельзя изменить) для поиска некоторых записей в нашем веб-приложении. На результаты поиска можно щелкнуть, чтобы просмотреть содержимое записи (с помощью .animate () он открывает пробел под строкой и создает еще один TR внизу и вставляет данные HTML из канала json).

В 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, HTML-код, который поставляется с w3c, и все хорошо, я действительно в растерянности относительно того, что происходит.

Кто-нибудь знает, как мне лучше отследить, что его вызывает, или мне просто включить режим IE7 на этих страницах?

Редактировать: поиск выполняется в всплывающем окне ajax, которое появляется в верхней части экрана. Его шаблон (базовый HTML) загружается из отдельного файла HTML и вставляется в div в нижней части исходной страницы. Это означает, что будут вложенные HTML-файлы (с тегами <html></html> и т. Д.). Повлияет ли это и на это?
Изменить 3: удаление этих дублирующих тегов не решило проблему.

Редактировать 2: Все еще не решили это. Является ли это только одной из тех вещей, которые IE8 не будет отображать должным образом и объяснит это браузером? Буду очень признателен за помощь.

Ответы [ 3 ]

4 голосов
/ 15 октября 2010

По принудительно перезагружает его в режиме совместимости. Вы имеете в виду, что вы получаете всплывающее уведомление с сообщением, что-то вроде: «Internet Explorer обнаружил проблему с этой страницей и загрузил ее в режиме совместимости»?

Если это так, это означает, что вы столкнулись с ошибкой в ​​IE.Называется «Hard assert», это означает, что механизм компоновки потерпел крах (не AV или что-то захватывающее, оно просто вошло в невосстановимое состояние), и, таким образом, IE пытается предоставить пользователю некоторый контент, используя более старыймеханизм компоновки.

Если проблема все еще возникает в IE9, пожалуйста, сообщите об ошибке на http://connect.microsoft.com/ie

спасибо!

3 голосов
/ 01 сентября 2010

Убедитесь, что ваш 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 голосов
/ 09 ноября 2010

После того, как коллега также провел некоторый поиск, мы нашли это здесь на SO , где было подтверждено, что max-height вызывает жесткое утверждение в IE8, подтверждая, что это действительно ошибка в IE8, как размещено EricLaw.

Мы использовали max-height для стиля div, в который мы вставляли контент, и, в свою очередь, вызывали hard assert. Вышеупомянутый связанный вопрос имеет обходной путь для всех, кто столкнулся с этой проблемой.

...