Вход

Просмотр полной версии : рендеринг HTML и FLASH в IE


всеникизаняты
09.07.2006, 00:01
Какая-то засада... Стоит мне подключить ХОТЬ ОДНУ флешку, что я сделал, к странице на сайте, как в IE страница перестает полностью подгружаться. То есть, не грузит вообще половину картинок, будто и нет на них ссылок в HTML. При том что в Опере и ФФ все прекрасно отображается.
Сейчас еще помониторю заголовки, но как-то это печально совсем.

iNils
09.07.2006, 00:06
Я думаю надо сначала полностью разобраться, что именно не работает, а потом уже писать сюда.

всеникизаняты
09.07.2006, 00:30
Значит так, выцепил я баннер, из-за которого проблема.
Опера, файрфокс - страница грузится нормально. IE6 - если есть этот баннер, то после его загрузки рендеринг страницы IE просто прекращает моментально и все, что не успело отобразится - не показывается. Проверил также обмен HTTP заголовками - браузер запрашивает все картинки, как положено.
Что особенного в этом баннере? Он тащит XML и делает loadMovie с другого хоста. Сам баннер в IE и в других браузерах грузится нормально.

iNils
09.07.2006, 00:54
Может все же исходник выложим?

всеникизаняты
09.07.2006, 01:50
Смотри ПМ

Принципиальную разницу я нашел. IE грузит флеш В ПЕРВУЮ ОЧЕРЕДЬ (возможно это связано с порядком разбора структуры документа - флеш находится в начале страницы). Firefox грузит флеш-баннеры ВНЕ ЗАВИСИМОСТИ от их положения на странице последними. Возможно по этому он не успевает "сдохнуть".
Да, я тут все-таки ошибся, IE-таки не запрашивает все картинки, то есть даже не шлет все запросы на некоторые картинки на странице.

всеникизаняты
09.07.2006, 02:04
Полевые испытания на моей локальной Фрибзде подтвердили мою правоту. Именно из-за того, что флеш грузится в ИЕ в порядке разбора анализатором HTML документа он и валит анализатора. Не даром, ой не даром в Опере и FF флэш разбирается в последнюю очередь. Именно так он не может испортить отображение документа, поскольку уже все отображено.

iNils
09.07.2006, 02:08
Просмотр в 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 дело вообще не доходит

iNils
09.07.2006, 04:03
Это естессно для примера, а вообще любой getURL("javascript: - фатально для IE, он после этого джаваскрипта перестает грузить страницу. Это только у меня такие кривые руки?Да нет, это известный момент. Еще и гиф анимация при этом должна останавливаться.

всеникизаняты
09.07.2006, 04:08
http://board.flashkit.com/board/archive/index.php/t-465855.html
Во блин, я не один такой несчастный. Так что же делать, неужели все-таки fscommand... Придетса видимо...

iNils
09.07.2006, 04:22
У меня на буке нет других браузеров кроме 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
Ну что тут делать?

iNils
09.07.2006, 14:11
Почитай 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
(+) Лишен всех недостатков двух первых вариантов + обладает их всеми достоинствами за исключением одного
(-) Работает ТОЛЬКО в восьмой версии флеш-плеера.
Диагноз: пригоден только для оптимистов и энтузиастов ;-)

Такая картина неприятная...

iNils
09.07.2006, 15:01
(-) В IE после вызова метода прекращается загрузка HTML документа
Диагноз: пригоден только для обработки кликов кнопок во флеше. Непригоден для инициализации флеш-ролика (размеры и проч. действия, выполняющиеся автоматически при загрузке).Это почему же?

всеникизаняты
09.07.2006, 15:05
Потому что как только во флеше происходит вызов getURL("javascript:... загрузка HTML документа браузером (IE) прекращается. Конечно, может такое быть, что канал инета шустрый и страница успевает подгрузится быстрее, чем сработает код баннера, но на диалап модеме это точно не так. В результате получаем недогруженную страницу.

всеникизаняты
09.07.2006, 15:07
Есть еще одно но: если весь сайт на флеше и кроме него грузить просто нечего, то тогда, конечно getURL решает.

iNils
09.07.2006, 15:09
Мне не понятно, а зачем сразу вызывать getURL?

всеникизаняты
09.07.2006, 17:09
Например, чтобы придать ролику определенный размер в окне браузера (если этот размер становится известен ТОЛЬКО на этапе инициализации). В моем случае флешка должна была принять размер подгружаемого изображения.

iNils
09.07.2006, 17:27
А что мешает узнать размеры чуть раньше и сразу сформировать нужный размер флешки?

всеникизаняты
09.07.2006, 22:32
можно конечно серверным скриптом узнать размеры картинки и подсунуть их в описание объекта ролика в HTML. Но, во-первых, это двойная работа (картинку грузит и сервер и клиент), а во-вторых, требует как минимум наличия соответствующего серверного ПО и соответствующих познаний, далеких от собственно флеша.
Или что подразумевается под "чуть раньше"?

iNils
09.07.2006, 23:04
Или что подразумевается под "чуть раньше"?Это значит при формировании страницы ява скрипту (или php) передать размер картинки которую будет грузить флеш.

Homo Sapiens
10.07.2006, 22:39
Да, есть такая хрень у ишака, помню, такое возникает при попытки юзать JS до полной загрузки, в смысле события js...
Из эого вывод, что вероятно стоит вешать события тем же JS но по onload/