В моем приложении 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>
ОБНОВЛЕНИЕ : я пытался изменить локальную среду, чтобы ссылка на приложение 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
требуются указанные выше методы безопасности с подстановочным знаком.