Как вызвать метод обратного вызова Flash Actionscript из JavaScript?
Я пытался вызвать метод обратного вызова Flash из JavaScript. Но, похоже, не работает. Пример кода сценария флэш-действия приведен ниже [Упрощено]:
import flash.events.ActivityEvent;
import flash.events.StatusEvent;
import flash.external.ExternalInterface;
var test_var = ExternalInterface.addCallback("js_method_to_call", flash_method);
function flash_method()
{
return "test";
}
Пример кода javascript написан ниже [упрощенно]:
function callFlashMethod(){
var flashFile = eval("window.document.test");
flashFile.js_method_to_call;
}
function loadTest(){
swfobject.embedSWF("test.swf", "test", "1", "1", "10.0.0", false);
}
$(document).ready(function(){
loadTest();
callFlashMethod();
});
В консоли пожарной ошибки всегда отображается ошибка "flashFile.js_method_to_call не является функцией".
5 ответов
Вот то, что должно работать действительно хорошо:
Используйте SWFObject.js для встраивания содержимого Flash:
// Embedding through SWFObject rocks in comparison with Adobe shits: var flashvars = {}; var params = {}; params.menu = "false"; params.salign = "t"; params.scale = "noscale"; params.wmode = "transparent"; params.allowScriptAccess = "always"; var attributes = {}; attributes.id = "${swf}"; swfobject.embedSWF("${swf}.swf", "flashDiv", "${width}", "${height}", "9.0.0", "", flashvars, params, attributes);
Используйте это для HTML:
<body> <div id="flashDiv"></div> </body>
Для вызова вашего метода Flash используйте этот шаблон:
// Functions needed for calling Flex ExternalInterface function thisMovie(movieName) { if (navigator.appName.indexOf("Microsoft") != -1) { return window[movieName]; } else { return document[movieName]; } }
Вызовите метод Flash:
function callFlashMethod() { thisMovie("${swf}").js_method_to_call(); }
Вы получаете ссылку на встроенный SWF-объект и используете ее для вызова метода as3.
//AS3 Code
ExternalInterface.addCallback("helloFromJS",helloFromJS);
private function helloFromJS():void
{
trace("JS is saying hello");
}
//HTML Code
<object width="100%" height="100%" id="Test">
<param name="movie" value="Test.swf"/>
//JS Code
var swfObject = document.getElementById("Test");
swfObject.helloFromJS();
На этой странице очень хорошо описывается решение, просто попробуйте заставить этот пример работать. Таким образом, вы можете разобраться в проблеме, и ответ Владимира Цветкова завершен.
Здесь есть интересное и довольно подробное руководство http://bytes.com/topic/flash/answers/694359-how-do-i-access-flash-function-using-javascript
Я не уверен насчет этой строки:
var flashFile = eval("window.document.test");
Я хотел бы использовать:
var flashFile = document.getElementById("test");
Кроме того, я предполагаю, что это была просто опечатка при вставке здесь, но flashFile.js_method_to_call;
должно быть flashFile.js_method_to_call();