В моем приложении Flex мне нужен элемент управления Javascript для вызова одного из моих методов ActionScript. Достаточно просто, согласно в документации Flex / Actionscript я написал это в своем коде ActionScript:
if (ExternalInterface.available)
ExternalInterface.addCallback("setName", setNameInActiveWindow);
В элементе управления Javascript я написал:
document.getElementById('FlexAppId').setName(name);
Отлично работает. Точно так, как ожидалось, поэтому я перешел в производство. Но в производстве это не работает :( Тот же точный код ... Я не могу понять. Вышеупомянутый код Javascript выполняется, но обратный вызов не выполняется в коде ActionScript.
Имеет ли это какое-то отношение к безопасности домена? Локально я использую local.mydomain.com:8080, где local.mydomain.com разрешается до 127.0.0.1 (мне нужно сделать это, чтобы некоторые виджеты работали правильно). И приложение Flex поступает с того же локального веб-сервера. Однако в производственной среде это просто www.mydomain.com (mydomain.com - не настоящее имя домена), а приложение Flex поступает с flash.mydomain.com (CDN).
У меня есть файл crossdomain.xml по адресу www.mydomain.com:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only"/>
<allow-access-from domain="*.mydomain.com"/>
</cross-domain-policy>
UPDATE: я попытался изменить локальную среду, чтобы на приложение Flex ссылались с flash.mydomain.com, как в производственной среде. Оказывается, у меня такая же проблема локально ... так что, похоже, это какая-то проблема безопасности домена, несмотря на файл crossdomain.xml, который у меня есть выше. Мне нужно что-то изменить в моем crossdomain.xml? Мне нужно что-то еще, чтобы заставить ExternalInterface.addCallback
работать?
ОБНОВЛЕНИЕ 2 : Все заработало! Мне пришлось сделать и Security.allowDomain («*»)
, и Security.allowInsecureDomain («*»)
. Установка flash.mydomain.com НЕ устранила проблему, мне пришлось поставить подстановочный знак. allowNetworking
не повлиял. Мне нужен allowScriptAccess = "always"
, но он у меня был раньше. Вызов Javascript с помощью ExternalInterface.call
легко работает только с этим параметром. Но для добавления обратного вызова с ExternalInterface.addCallback
требуются указанные выше методы безопасности с подстановочным знаком.