Просмотр полной версии : рендеринг HTML и FLASH в IE
всеникизаняты
09.07.2006, 00:01
Какая-то засада... Стоит мне подключить ХОТЬ ОДНУ флешку, что я сделал, к странице на сайте, как в IE страница перестает полностью подгружаться. То есть, не грузит вообще половину картинок, будто и нет на них ссылок в HTML. При том что в Опере и ФФ все прекрасно отображается.
Сейчас еще помониторю заголовки, но как-то это печально совсем.
Я думаю надо сначала полностью разобраться, что именно не работает, а потом уже писать сюда.
всеникизаняты
09.07.2006, 00:30
Значит так, выцепил я баннер, из-за которого проблема.
Опера, файрфокс - страница грузится нормально. IE6 - если есть этот баннер, то после его загрузки рендеринг страницы IE просто прекращает моментально и все, что не успело отобразится - не показывается. Проверил также обмен HTTP заголовками - браузер запрашивает все картинки, как положено.
Что особенного в этом баннере? Он тащит XML и делает loadMovie с другого хоста. Сам баннер в IE и в других браузерах грузится нормально.
Может все же исходник выложим?
всеникизаняты
09.07.2006, 01:50
Смотри ПМ
Принципиальную разницу я нашел. IE грузит флеш В ПЕРВУЮ ОЧЕРЕДЬ (возможно это связано с порядком разбора структуры документа - флеш находится в начале страницы). Firefox грузит флеш-баннеры ВНЕ ЗАВИСИМОСТИ от их положения на странице последними. Возможно по этому он не успевает "сдохнуть".
Да, я тут все-таки ошибся, IE-таки не запрашивает все картинки, то есть даже не шлет все запросы на некоторые картинки на странице.
всеникизаняты
09.07.2006, 02:04
Полевые испытания на моей локальной Фрибзде подтвердили мою правоту. Именно из-за того, что флеш грузится в ИЕ в порядке разбора анализатором HTML документа он и валит анализатора. Не даром, ой не даром в Опере и FF флэш разбирается в последнюю очередь. Именно так он не может испортить отображение документа, поскольку уже все отображено.
Просмотр в IE ни каких проблем у меня не создал, поэтому сложно что либо сказать.
всеникизаняты
09.07.2006, 02:14
Сравни то, что получилось с тем, что есть в Файрфоксе. Возможно он просто симметрично не отобразил картинки и тебе показалось, что проблем нет. Еще одна особенность: при быстрых соединениях, когда обмен HTTP заголовками идет достаточно быстро, анализатор браузера успевает обработать структуру документа полностью прежде, чем флеш-плагин его убьет своей ошибкой. У меня такое в локали наблюдается. Но все же, если очистить кэш и попробовать еще разок-другой - все-таки обнаруживается, что элементы документа загружены не полностью.
всеникизаняты
09.07.2006, 02:16
Все, сейчас флеш переделаю, ошибка, очевидно, в нем.
всеникизаняты
09.07.2006, 03:06
Парился я парился, а оказалось то... ну е-мое...
Во флеше на первом фрейме одна строка:
getURL("javascript:alert('you clicked me')");
И все. Если есть эта строчка, выскакивает джаваскрипт-окно и на странице не грузится ни одно изображение (только в IE 6).
всеникизаняты
09.07.2006, 03:28
Это естессно для примера, а вообще любой getURL("javascript: - фатально для IE, он после этого джаваскрипта перестает грузить страницу. Это только у меня такие кривые руки?
всеникизаняты
09.07.2006, 04:00
Вот еще одна наводка. Попробуйте сделать так:
1.Флеш с javascript:alert('flash'); на первом фрейме
2.HTML документ с body onLoad="alert('onLoad');"
Так вот у меня в FF сначала выскакивает сообщение от body.onLoad, а потом от flash, а в IE выскакивает ТОЛЬКО от flash, до body.onLoad дело вообще не доходит
Это естессно для примера, а вообще любой getURL("javascript: - фатально для IE, он после этого джаваскрипта перестает грузить страницу. Это только у меня такие кривые руки?Да нет, это известный момент. Еще и гиф анимация при этом должна останавливаться.
всеникизаняты
09.07.2006, 04:08
http://board.flashkit.com/board/archive/index.php/t-465855.html
Во блин, я не один такой несчастный. Так что же делать, неужели все-таки fscommand... Придетса видимо...
У меня на буке нет других браузеров кроме Maxthon (IE). Поэтому предлагаю самому провести такой эксперимент. Сделать текстовую флешку с динамическим текстовым полем txt. И в первый кадр поставить такой код:
txt.text = "1";
getURL ("javascript:alert('flash');");
txt.text = "2";
А в HTML документе поставить, выше упомянутый onLoad="alert('onLoad');"
В IE выскакивает окно с тектом onLoad, а поле принимает значение 2. Интересно как поведет себя фф. Тоже будет 2 или же 1?
всеникизаняты
09.07.2006, 13:52
Вобщем, отказался я от getURL, но FSCommand - засада та еще. Даже официальный пример macromedia и тот в Опере не работает
http://www.adobe.com/support/flash/ts/documents/java_script_comm/flash_to_javascript.html
Ну что тут делать?
Почитай http://noregret.org/tutor/navigation/ может найдешь что-нить полезное.
Кстати, а что собственно ты хочешь сделать?:)
всеникизаняты
09.07.2006, 14:48
Итого, подводим итог (не везде ясно описанный и очевидный, возможно его стоит занести в FAQ - если честно, я туда сам не смотрел):
Можно-ли обратится к javascript из флеш-ролика?
Можно, есть три способа.
1.getURL()
(+) Работает во всех браузерах
(+) Поддерживается во флеш-плеерах начиная с версии 2
(+) Не требует никаких нагромождений в коде HTML
(-) Проигрывает звук КЛИКА, поскольку является аналогом клика по ссылке
(-) В IE после вызова метода прекращается загрузка HTML документа
Диагноз: пригоден только для обработки кликов кнопок во флеше. Непригоден для инициализации флеш-ролика (размеры и проч. действия, выполняющиеся автоматически при загрузке).
2.fscommand()
(+) Является внутренним вызовом функции javascript, по сему не кликает и не останавливает загрузку документа
(-) Не работает в Opera и старых версиях Netscape/Mozilla, а также же в большинстве не-Windows браузеров
(-) Требует достаточно громоздкого javascript-кода в тексте страницы.
Диагноз: не пригоден, если только вы не ориентируетесь только на посетителей с IE
3.flash.external.ExternalInterface
(+) Лишен всех недостатков двух первых вариантов + обладает их всеми достоинствами за исключением одного
(-) Работает ТОЛЬКО в восьмой версии флеш-плеера.
Диагноз: пригоден только для оптимистов и энтузиастов ;-)
Такая картина неприятная...
(-) В IE после вызова метода прекращается загрузка HTML документа
Диагноз: пригоден только для обработки кликов кнопок во флеше. Непригоден для инициализации флеш-ролика (размеры и проч. действия, выполняющиеся автоматически при загрузке).Это почему же?
всеникизаняты
09.07.2006, 15:05
Потому что как только во флеше происходит вызов getURL("javascript:... загрузка HTML документа браузером (IE) прекращается. Конечно, может такое быть, что канал инета шустрый и страница успевает подгрузится быстрее, чем сработает код баннера, но на диалап модеме это точно не так. В результате получаем недогруженную страницу.
всеникизаняты
09.07.2006, 15:07
Есть еще одно но: если весь сайт на флеше и кроме него грузить просто нечего, то тогда, конечно getURL решает.
Мне не понятно, а зачем сразу вызывать getURL?
всеникизаняты
09.07.2006, 17:09
Например, чтобы придать ролику определенный размер в окне браузера (если этот размер становится известен ТОЛЬКО на этапе инициализации). В моем случае флешка должна была принять размер подгружаемого изображения.
А что мешает узнать размеры чуть раньше и сразу сформировать нужный размер флешки?
всеникизаняты
09.07.2006, 22:32
можно конечно серверным скриптом узнать размеры картинки и подсунуть их в описание объекта ролика в HTML. Но, во-первых, это двойная работа (картинку грузит и сервер и клиент), а во-вторых, требует как минимум наличия соответствующего серверного ПО и соответствующих познаний, далеких от собственно флеша.
Или что подразумевается под "чуть раньше"?
Или что подразумевается под "чуть раньше"?Это значит при формировании страницы ява скрипту (или php) передать размер картинки которую будет грузить флеш.
Homo Sapiens
10.07.2006, 22:39
Да, есть такая хрень у ишака, помню, такое возникает при попытки юзать JS до полной загрузки, в смысле события js...
Из эого вывод, что вероятно стоит вешать события тем же JS но по onload/
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.