Безопасность Flash: проблема с загрузкой модулей Flash 8 AS2 в модуль Flash 6 AS1 - PullRequest
2 голосов
/ 06 января 2009

У меня есть старая программа, написанная на Actionscript 1, скомпилированная во Flash 6. Она загружает 10 других модулей, из которых 3 написаны на Actionscript 2, скомпилированы во Flash 8. Оригинальная программа встроена в HTML и отлично работает, когда HTML-файл запускается на веб-сервере. Но если я просто перетащу html-файл в свой браузер, 3 модуля AS2 не загрузятся. Или, точнее, они загружаются, но я не могу получить доступ к их функциям. Все модули скомпилированы с «локальной безопасностью воспроизведения = доступ только к локальным файлам». Я использую Flash CS3 для компиляции всех модулей. Не переписывая основной загрузочный модуль в AS2, я могу что-нибудь сделать, чтобы решить эту проблему? Спасибо

Ответы [ 2 ]

1 голос
/ 06 января 2009

Я не уверен, связано ли это с вашей проблемой, но смешивание AVM1 SWF-файлов может быть проблематичным.

Если флэш-SWF скомпилирован для версии 6 без опции «оптимизировать для версии 6r65», выбранной в настройках вывода, то полученный байт-код в значительной степени несовместим с SWF-файлами AVM1, скомпилированными для v6r65 или более поздней версии (особенно при использовании языка AS2 в отличие от AS1).

Это связано с тем, что любая ссылка на свойство _global ссылается на другое местоположение при компиляции для этих более ранних версий, поэтому свойства, определенные в пространстве имен _global, не видны для фильмов, предназначенных для более поздних версий, и наоборот.

Учитывая, что определения классов находятся как переменные в пространстве имен _global, это может оказаться очень проблематичным при смешивании SWF-файлов, предназначенных для версий, которые находятся по обе стороны от 6r65.

Я помню, как взламывал это путем копирования ссылки _global в одном из SWF-файлов в место, которое было видно в другом SWF-файле.

(до 6r65)

class SomeClass
{
    //
}
...
_global.someProp=123;

_level0.globalCopy=_global

(в посте 6r65)

trace(SomeClass) //undefined
trace(_global.someProp) //undefined
trace(_level0.globalCopy.SomeClass) //[object object] i.e. defined
trace(_level0.globalCopy.someProp) //123
1 голос
/ 06 января 2009

Правила модели безопасности Flash выглядят довольно загадочно, но, похоже, вы столкнулись с ограничением по написанию сценариев. Одним из вариантов может быть обходной путь, например, путем установки Apache (или чего-либо еще) и доступа к контенту через http://localhost... вместо file://.... Тем не менее, проблема безопасности, вероятно, тоже может быть решена.

Сначала вы можете захотеть ознакомиться с этой статьей и, в частности, с диаграммой на полпути вниз по этой странице, в которой изложены основные правила, когда одному SWF-файлу разрешен доступ к функциям другого. Как показано на диаграмме, самый простой способ заставить все доступы работать, это заставить все содержимое функционировать в «локальной доверенной» песочнице. Как это сделать, описано в статье на стр. 4 той же статьи.

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