Я получил это на работу! Перебирая все комбинации настроек безопасности ... теперь мне нужно понять, почему это работает.
м приложении 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
требует вышеуказанных методов безопасности с подстановочным знаком.