Я вообще этого не понимаю. Вот несколько 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.
Теперь, если я включу режим совместимости IE,
проблема исчезает без использования вышеуказанного взлома. Выключите его, и проблема вернется (если нет взлома).
Но когда я попытался сделать простой тест, используя тот же самый HTML (минус несколько тегов JSP) и лишенный SWF, который содержит только код изменения размера и инструменты для тестирования, все работает нормально. Однако в этом случае значок совместимости не отображается вообще.
Мы используем Tomcat 6.0.32. Я не знаю, что мы используем специальные заголовки, и нет мета-тегов в отношении режима совместимости IE (в основном приложении или в тестовом приложении).