Я знаю только, как это работает в 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 строк кода.