2016-11-25 1 views
1

У меня есть требование в проекте, который должен вызвать функцию actioncript 3 из javascript. Я прочитал много ответов из stackoverflow и adobe и создал простое тестовое приложение. В этом я использовал ExternalInterface.addCallback для регистрации обеих функций, и я также включил разрешения безопасности как в actionscript, так и в html.вызов actioncript 3 функция из javascript с addCallback не работает

Action Script 3 Встроенный код

Я не использовать внешний .as файл вместо я использовал панель действий для создания кода.

import fl.controls.Button 
import flash.events.MouseEvent; 

flash.system.Security.allowDomain("*") 

var butt:Button = new Button(); 
addChild(butt); 

butt.label = "hello"; 
butt.toggle = true; 
butt.move(50, 50); 
butt.height = 100; 
butt.addEventListener(MouseEvent.CLICK, clickhandle); 

function clickhandle(e:MouseEvent) 
{ 

     if(butt.height == 100) 
      butt.height = 200; 
     else butt.height = 100; 

} 

ExternalInterface.addCallback("callas", clickhandle); 

В тестовом приложении будет отображаться кнопка ac3. Нажав на эту кнопку, он будет переключать расширение и сворачивание своей высоты с помощью обработчика щелчка «clickhandle». Это функция, которую я намереваюсь вызывать из javascript.

HTML код

<html> 
<head> 
<script> 
function callas() { 
    var hehe = document.getElementById('cvpanel'); 
    console.log(hehe); 
    hehe.clickhandle(); 
} 
</script> 
</head> 

<body> 
<p>Test</p> 
<object id='cvpanel' name='cvpanel' width="425" height="350" type="application/x-shockwave-flash" data="one.swf"> 
    <param value="one.swf" name="movie"> 
    <param name="allowscriptaccess" value="always"/> 
    <p>You need Flash to see it.</p> 
</object> 
</body> 
</html> 

Приложение работает под http://localhost через апач и все файлы, необходимые в той же папке. Я мог запустить приложение и видеть, как появятся кнопки. Нажимая на них, они переключаются по высоте, как ожидалось.

Когда я вызываю функцию каллы из консоли браузера я получаю сообщение об ошибке в консоли, как

"TypeError: hehe.clickhandle is not a function"

в Firefox и аналогичные в Internet Explorer.

Есть что-то не хватает?

ответ

3

В вспышкой вы обнажая clickhandle как калл

ExternalInterface.addCallback("callas", clickhandle); 

так вы должны позвонить каллы() из яваскрипта

var hehe = document.getElementById('cvpanel'); 
hehe.callas(); 
+0

Я получил Сообщ ошибки в консоль вроде «Метод вызова ошибок в NPObject!» –

+0

После поиска вышеуказанной ошибки я наткнулся на предложения по вопросу, который просил следовать определенным правилам. http://stackoverflow.com/questions/5607726/how-can-i-overcome-error-calling-method-on-npobject-and-play-a-swf. В этом пользователь «nuton» предложил вызвать функцию с точными параметрами, и если нет параметров, то функция должна пройти null. Итак, я позвонил как hehe.callas (null), и это сработало. Кроме того ... (contd) –

+0

Я столкнулся с https://bugzilla.mozilla.org/show_bug.cgi?id=308814, в котором многие пользователи после выполнения systest обнаружили, что запуск приложения с реального хоста (live web-сервера) работает хорошо. Да, для меня в localhost это не сработало даже после добавления null. Я загрузил флеш-файл и html-файл на свой веб-сервер, и он сработал. Я следовал только двум условиям. Один передает значение null, а другой запускает приложение с веб-сервера. и я не придерживался других предложений. –