ExternalInterface.addCallback в ActionScript работает только локально, а не в производственной среде

В моем приложении 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 требуются указанные выше методы безопасности с подстановочным знаком.

7
задан at. 15 January 2011 в 20:18
поделиться