Всем привет,
сразу оговорюсь: я не Flash-разработчик, просто столкнулся с проблемой при написании крохотного приложения для тестирования страницы, содержащей Flash-объект. Решения никакого выгуглить не удалось...
Итак, что надо:
1) С домена domainA загружается страница, которая внутри себя содержит 2 javascript-функции: getDataAsJSON(id) и updateResponse(id, value) - первая служит для получения некоторых данных со страницы Flash-приложением, вторая - для установки им некоторых результирующих значений.
2) На странице размещён object-тэг, загружающий Flash-приложение с другого домена, domainB. Вот HTML, в который он рендерится для IE 8:

Код:
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="flash_q17" name="flash_q17" width="400" height="300">
<param name="movie" value="http://domainB/Test.swf" />
<param name="allowScriptAccess" value="always"/>
<param name="allowNetworking" value="all"/>
<param name="swliveconnect" value="true"/>
<param name="allowFullscreen" value="false"/>
<param name="play" value="true">
<param name="menu" value="false"/>
<param name="quality" value="high"/>
<param name="flashvars" value="questionKey=q17"/>
<a href="http://www.adobe.com/go/getflashplayer">
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
</a>
</object>
3) Flash-приложение содержит простейший ActionScript, загружающий данные, полученные от первой функции, в TextInput, и вызывающий вторую функцию с некоторыми аргументами. Кода под рукой нет, но что-то типа такого:

Код AS3:
tbxInput.text = ExternalInterface.call("getDataAsJSON", "abcdefg").toString();
ExternalInterface.call("updateResponse", "abcdefg", "123456");
Итак, результаты таковы:
a) когда domainA == domainB, всё великолепно работает (локально и удалённо)
б) когда domainA != domainB, но оба хостятся физически на одном сервере (в одной файловой системе, например myserver/domainA и myserver/domainB), то при вызове из локального браузера (т.е. когда для мена myserver == localhost) всё работает; при удалённом вызове - нет (tbxInput пустой, "updateResonse" тоже не вызывается, никаких видимых ошибок в браузер не выводится - просто приложение загружается пустым и нерабочим).
в) если я в Global Security Settings Panel разрешаю всё обоих доменов, всё снова работает (точно вкладку не скажу, кажется, вот эта имела решающее значение:
http://www.macromedia.com/support/do...manager04.html)
Проблема в том, что не могу же я конечному пользователю предлагать идти по какой-то там ссылке и настраивать права доступа для каждого Flash-приложения. В реальной production-системе они будут просто загружаться по внешним ссылкам, т.е. я никакого участия в их разработке принимать не буду, моя задача - отрендерить для них валидный контейнер, а также пропихнуть внутрь приложения инициализирующий данные и получить на выходе некоторый value. Если с первой задачей я, допустим, могу справиться, сериализовав все входные данные в строку и запихнув её во flashVars (что в принципе уже не слишком хорошо), то со второй задачей так не поступить, поскольку value должен вернуться в js текущей страницы для дальнейшего использования. В общем, мне надо как-то обойти эти нелепые ограничения безопасности.
Придумал пока разве что разместить в domainA HTTP-хэндлер, который внутри себя будет загружать приложение и отдавать его в респонс (короче, прокси). Но это же бред - такую тривиальную, вроде бы, задачу, таким образом решать...
Буду благодарен любым подсказкам/комментариям.