Я пытаюсь использовать эффект масштаба из библиотеки jQuery UI в элементе-оболочке, который содержит объект Flash.
Проблема, с которой я сталкиваюсь, заключается в том, что содержимое моей обертки автоматически перемещается в другую оболочку (.ui-effects-wrapper
), и когда это происходит, объект Flash перезагружается.
Конечно, конкретная проблема здесь связана с тактикой, используемой jQuery UI, - но в целом возможно ли перемещать объект Flash внутри DOM без его перезагрузки?
Ответ 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 строк кода.
Ответ 2
Я не знаю, можете ли вы сделать эту работу в браузерах, которые страдают от этой проблемы, что, по-видимому, связано с некоторыми тестировками на момент написания последних версий Chrome (Linux), Firefox (Win/Linux), Safari (Win) и Opera (Win/Linux)), но в Internet Explorer (или, по крайней мере, в IE6 и IE8, в Windows XP) апплет Flash не перезагружается. Однако в IE существует некоторая странность, когда SWFObject вызывает обратный вызов "embed" дважды, когда он повторно вставлен в дерево документа. Поэтому я решил просто не пытаться сделать что-то подобное и сохранить состояние Flash в JavaScript, как было предложено в первом ответе.
В любом случае, извините за отсутствие реального ответа, но поскольку это был первый результат google при поиске по той же проблеме, я подумал, что может быть полезно указать, какие браузеры я знаю об этой проблеме (я бы ответил на Комментарий jayarjo, но у меня пока нет достаточной репутации:/)