Могу ли я переместить Flash-объект в DOM без перезагрузки? - PullRequest
10 голосов
/ 19 октября 2010

Я пытаюсь использовать эффект масштабирования из библиотеки пользовательского интерфейса jQuery для элемента оболочки, содержащего объект Flash.

Проблема, с которой я сталкиваюсь, заключается в том, что содержимое моей оболочки автоматически перемещается вдругая оболочка (.ui-effects-wrapper), и когда это происходит, объект Flash перезагружается.

Конечно, конкретная проблема здесь связана с тактикой, используемой в пользовательском интерфейсе jQuery, но, как правило, можно лиFlash-объект внутри DOM без его перезагрузки?

Ответы [ 2 ]

13 голосов
/ 19 октября 2010

Я знаю только, как это работает в Gecko (движок рендеринга Firefox). В этом движке нет, вы не можете переместить <object> или <embed> в дереве DOM без перезагрузки связанного объекта Flash. Это на самом деле еще хуже: вы не можете сделать ничего, что могло бы привести к разрушению поля CSS , нарисованного объектом Flash. Gecko рассматривает CSS-блоки как эфемерные; почти любая модификация DOM, включающая поддерево, содержащее <object>, уничтожит связанный блок CSS, как и любое количество манипуляций с CSS, начиная от очевидного (установить display:none) до неясного (изменить opacity или overflow). ). Но состояние плагина привязано к дереву блоков, а не к дереву DOM, поэтому, если блок уничтожен и воссоздан, плагин перезагружается.

Это считается ошибкой & mdash; ошибка 90268 , девять лет на момент написания этой статьи. См., В частности, комментарий 80 для действительно длинного объяснения того, почему это так и почему, к сожалению, я не удивлюсь, если пройдет еще девять лет без исправления.

Возможно, вы могли бы обойти эту проблему, экспортировав все состояние вашего плагина в JavaScript на содержащей странице.

ОБНОВЛЕНИЕ: Только через два года ошибка была исправлена! Исправление будет в Firefox 13, выпуск которого запланирован на 5 июня 2012 года; если вы хотите его раньше, он будет в «бета-версии» 24 апреля, а «Аврора» вскоре после 13 марта (что сегодня). Джош Аас заслуживает большой похвалы за то, что боролся с этим на земле & ndash; исправление прошло 54 ревизии и изменило более 3000 строк кода.

2 голосов
/ 26 мая 2011

Я не знаю, сможете ли вы заставить это работать в браузерах, которые страдают от этой проблемы - которые, по-видимому, включают некоторые тесты на момент написания последних версий Chrome (Linux), Firefox (Win / Linux), Safari(Win) и Opera (Win / Linux)) - но в Internet Explorer (или, по крайней мере, в IE6 и IE8 в Windows XP) апплет Flash не перезагружается.Однако в IE есть некоторая странность, когда SWFObject дважды вызывает обратный вызов embed при его повторной вставке в дерево документа.Поэтому я решил просто никогда не пытаться делать что-то подобное и сохранять свое состояние Flash в JavaScript, как было предложено в первом ответе.

В любом случае, извините за отсутствие реального ответа, но так как это былоПервый результат Google, когда гуглил по той же проблеме, я чувствовал, что было бы полезно перечислить, какие браузеры, о которых я знаю, имеют эту проблему (я отвечу на комментарий jayarjo, но у меня пока недостаточно репутации: /)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...