Я не могу заставить работать ExternalInterface.addCallback - пытаюсь вызвать функцию AS3 нажатием кнопки js - PullRequest
0 голосов
/ 15 июня 2010

Я пытаюсь использовать ExternalInterface.addCallback, чтобы позволить js вызывать метод as3.Мой код выглядит следующим образом:

AS:

ExternalInterface.addCallback("sendToActionscript", callFromJavaScript);

function callFromJavaScript():void{ 
circle_mc.gotoAndStop("finish"); 
}

JS:

<button type="button" onclick="callToActionscript()">Switch to square</button> 
<script type="text/javascript"> 
function callToActionscript() { 
flashController = document.getElementById("jstoactest")
flashController.sendToActionscript(); 
} 
</script>

Не работает.Что я делаю не так?

Ответы [ 3 ]

1 голос
/ 17 июня 2010

Я установил флаг isFlashReady в JS как FALSE.Затем, когда ваш SWF-файл загружен, после запуска Event.ADDED_TO_STAGE я добавляю ExternalInterface.addCallback и переворачиваю флаг isFlashReady в TRUE.Это предотвращает вызов SWF до его готовности.Возможно, вы захотите бросить alert () в функции JS ниже, чтобы увидеть, где он застрял.Надеюсь, это поможет.

JS:

var isFlashReady = false;
function thisMovie(movieName)
{
     if (navigator.appName.indexOf("Microsoft") != -1)
     return window[movieName];
}else{
     return document[movieName];
}
function callToActionScript(value)
{
     if(isFlashReady)
     {
          thisMovie("SWFID").sendToActionScript();
     }
}
function flashReady(value)
{
     isFlashReady = true;
}

AS:

if (ExternalInterface.available) {
        try {
                ExternalInterface.addCallback("sendToActionScript", callFromJavaScript);
                flash.external.ExternalInterface.call(flashReady,true);
            } catch (error:SecurityError) {
                trace("A SecurityError occurred: " + error.message + "\n");
            } catch (error:Error) {
                trace("An Error occurred: " + error.message + "\n");
            }
} else {
            trace("External interface is not available for this container.");
}
0 голосов
/ 20 июня 2010

Ваш SWF-файл обслуживается из того же домена, что и HTML-страница?Если домены различаются, вам нужно будет использовать Security.allowDomain , чтобы позволить им обмениваться данными.

Кроме того, я обнаружил, что самый простой способ отладки Flash -> связь с JavaScript заключается виспользуйте FireBug для Firefox.(извините, я могу опубликовать только одну ссылку!)

0 голосов
/ 15 июня 2010

убедитесь, что AllowScriptAccess установлен на «always» или «sameDomain» при внедрении флэш-памяти и посмотрите, поможет ли это. LiveDocs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...