Я совсем не понимаю этого.Вот некоторый код 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%.
Кто-нибудь знает , почему происходит это абсолютно ошеломляющее поведение?
ОБНОВЛЕНИЕ
@ c69 создалвопрос: «Может быть, это IE9 для удаления мертвого кода?»
Я не знал об этом, поэтому я пошел и гуглил и нашел эту статью по теме, а также некоторое обсуждение этого в другом месте.Я не знаю достаточно об этом, чтобы оценить, как это повлияет на двухстрочную функцию Javascript, тем не менее, тем более, что одна из строк имеет референт на странице (хотя она загружается поздно через код SwfObject).Тем не менее, для «оптимизатора» кода было бы довольно серьезной ошибкой удалить строки кода, которые он посчитал ненужными, потому что не понимает, как они называются.И если он действительно не смог понять, как называются строки, как вставка строки, сделавшей фиктивное изменение в document.title, делает этот код внезапно "необходимым"?
ОБНОВЛЕНИЕ 2
Еще одна часть головоломки Это может быть связано с режимом совместимости IE 9.Страница запускается в стандартном режиме IE 9.
Теперь, если я включу режим совместимости IE,
проблема исчезнет без использования вышеупомянутого хака.Выключите его, и проблема вернется (если взлома нет).
Но когда я попытался сделать простой тест, используя точно такой же HTML (без пары тегов JSP) и урезанный SWF, который толькосодержит код изменения размера и инструменты для тестирования, все работает отлично.Однако в случае значок совместимости вообще не отображается.
Мы используем Tomcat 6.0.32.Я не знаю, что мы используем какие-либо специальные заголовки, и нет метатегов, касающихся режима совместимости IE (в основном приложении или в моем тестовом приложении).