Ответ 1
Я знаю только, как это работает в Gecko (движок рендеринга Firefox). В этом движке нет, вы не можете перемещать <object>
или <embed>
в дереве DOM без перезагрузки связанного объекта Flash. Это на самом деле хуже, чем это: вы не можете сделать ничего, что могло бы привести к тому, что окно CSS, нарисованное объектом Flash, будет уничтожено. Gecko рассматривает CSS-поля как эфемерные; почти любая модификация DOM, включающая поддерево, содержащее <object>
, приведет к уничтожению связанного поля CSS, а также любое количество манипуляций с CSS, начиная от очевидного (set display:none
) до неясного (изменить opacity
или overflow
). Но состояние плагина привязано к дереву ящиков, а не дереву DOM, поэтому, если ящик уничтожен и воссоздан, плагин перезагружается.
Это согласен быть ошибкой; ошибка 90268, девять лет на момент написания этой статьи. См., В частности, комментарий 80 за действительно длинное объяснение, почему это так и почему, к сожалению, я не удивлюсь, если он пойдет другим девять лет без фиксации.
Возможно, вы могли бы обойти это, экспортировав все свое состояние плагина в JavaScript на странице с содержанием.
ОБНОВЛЕНИЕ: Только два года спустя ошибка исправлена! Исправление будет в Firefox 13, в настоящее время запланировано на выпуск 5 июня 2012 года; если вы захотите этого раньше, он будет в "бета-версии" 24 апреля и "авроре" вскоре после 13 марта (который сегодня). Джош Аас заслуживает большого уважения за борьбу с этим на землю; исправление прошло через 54 ревизий и изменило более 3000 строк кода.