2010-06-15 1 views
0

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

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> 

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

ответ

0

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

1

Я установил флаг isFlashReady в JS как FALSE. Затем, когда ваш SWF загружен, после запуска Event.ADDED_TO_STAGE, я добавляю ExternalInterface.addCallback и flip флаг 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

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

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

Смежные вопросы