Подтвердить что ты не робот

Stupefyingly weird IE 9 Ошибка JavaScript: изменение имени документа делает последующий запуск кода

Я вообще этого не понимаю. Вот несколько Javascript-кода, который работает в каждом браузере, но IE 9. Он вызывается из Flash-ролика с помощью ExternalInterface и предназначен для динамического изменения размера фильма в DOM, если размер фильма изменяется внутри

function vResizeFlash(swfId, ht) {
    document.getElementById(swfId).height = "100%";
    document.getElementById('flashContainer').style.height = ht + "px";
}

Но он отлично работает, если я изменяю document.title:

function vResizeFlash(swfId, ht) {
    // IE 9 won't run the rest of this function unless
    // we go through the charade of changing the document title.
    if (navigator.appName.indexOf("Microsoft") != -1) {
       var docTitle = document.title.replace(/^(.+?)\s*$/,"$1");
       document.title = docTitle + " ";
    }
    // Well-coded browsers begin here
    document.getElementById(swfId).height = "100%";
    document.getElementById('flashContainer').style.height = ht + "px";
}

Здесь я просто обрезаю любое белое пространство с правой стороны document.title, а затем добавлю к нему один символ пробела. Внезапно выполняются следующие строки. Примечание. На странице есть другие вызовы ExternalInterface, и все они работают нормально, даже в IE 9, поэтому это не проблема Flash/IE 9.

Я наткнулся на исправление, потому что я изменял заголовок, чтобы показать аргументы функции (в качестве теста быстрой отладки), чтобы убедиться, что функция запускается. И вдруг код работал. Выньте это? Не работает. 100% воспроизводимый.

Кто-нибудь знает, почему происходит это абсолютно одурманивающее поведение?

UPDATE

@c69 поставил вопрос: "Может быть, его IE9 с удаленным кодом?"

Я не знал об этом, поэтому я пошел и отправился в Google и нашел эту статью по этой теме, а также обсуждение в другом месте. Я не знаю достаточно об этом, чтобы оценить, как это повлияет на двухстрочную функцию Javascript, тем более, что одна из строк имеет референент на странице (хотя это поздняя загрузка через код SwfObject). Тем не менее, было бы неплохой ошибкой для "оптимизатора" кода для удаления строк кода, которые он считал ненужными, потому что он не понимает, как они вызываются. И если он не понимал, как вызываются строки, как вставка строки, создающей фиктивные изменения в document.title, визуализирует этот код внезапно "необходимо"?

ОБНОВЛЕНИЕ 2

Еще одна часть головоломки. Это может иметь какое-то отношение к режиму совместимости IE 9. Страница запускается в режиме стандартов IE 9.

enter image description here

Теперь, если я включу режим совместимости IE,

enter image description here

проблема исчезает без использования вышеуказанного взлома. Выключите его, и проблема вернется (если нет взлома).

Но когда я попытался сделать простой тест, используя тот же самый HTML (минус несколько тегов JSP) и лишенный SWF, который содержит только код изменения размера и инструменты для тестирования, все работает нормально. Однако в этом случае значок совместимости не отображается вообще.

enter image description here

Мы используем Tomcat 6.0.32. Я не знаю, что мы используем специальные заголовки, и нет мета-тегов в отношении режима совместимости IE (в основном приложении или в тестовом приложении).

4b9b3361

Ответ 1

как упоминается InvertedSpear, проверьте тип вашего документа, у меня были проблемы с IE9 в последнее время, и большинство из них сводилось к тегам типа Doc, запускающим режим совместимости, который мне не нужен, то же самое можно сказать и о мета теги, чтобы он мог сводиться к вашим метатегам.

Вы всегда можете навязать рабочий режим совместимости, используя приведенные ниже ссылки.

from: http://evolpin.wordpress.com/2011/02/25/ie9-compatibility-and-the-meta-tag/

Ive обнаружил, что это действительно документировано Microsoft...

http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx

"Заголовок X-UA совместимый не чувствителен к регистру, однако он должен отображаться в заголовке веб-страницы (раздел HEAD) перед всеми другими элементами, кроме элемента заголовка и других мета-элементов."

Ответ 2

Всякий раз, когда я вижу, что подобное происходит на любом языке, это потому, что есть другой код, который имеет ошибку. Как вы указали, ваш простой случай не создает проблемы. Попробуйте удалить другой код за несколько строк за раз, пока проблема не исчезнет - последний удаленный код должен содержать проблему.

Приветствия