2009-05-03 2 views
4

Я пытаюсь отредактировать флэш, чтобы сделать внешний вызов функции javascript, но без успеха. Вот мой код ActionScript 2.0:Использование ExternalInterface во Flash

//testing external .js calls 

import flash.external.ExternalInterface; 

//attempting to make external js call 

ExternalInterface.call("createPlaylist","It's my Life!"); 

и вот мой javascript;

function createPlaylist(mess){ 
    alert("called createPlaylist: " + mess); 
} 

Я видел много примеров, и я в основном запутался об использовании ExternalInterface.addCallback. Мне не нужен javascript, чтобы вернуть что-нибудь, чтобы вспыхнуть, так это необходимо?

По какой-то причине я никогда не вижу предупреждения. Кто-нибудь видит какие-либо проблемы в моем коде? Есть ли у меня ExternalInterface библиотека? Кроме того, какой лучший способ использовать ExternalInterface (т. Е. Проверка ошибок и т. Д.) Спасибо заранее ...

ответ

7

ExternalInterface.addCallback для javascript для звонка в ваше приложение Flash. Если, например, вы хотите кнопку HTML, которая запускает/останавливает видео, вы просто добавляете обратный вызов для именованного метода, а ваш js может, чем имя метода [FlashObject] .callback.

Я бы сказал, что лучший способ добавить методы ExternalInterface в ваше приложение - это создать класс, отвечающий за передачу JS для каждого случая взаимодействия в приложении. Например:

public class ExternalVideoControl { 

    private var video:MediaDisplay; 

    public function ExternalVideoControl(video:MediaDisplay) { 
     //ExternalInterface.addCallback - one callback for each method you want to expose, pointing to a method within this class; 
     //add listeners on the video player and point them to methods in this class, for example onProgress 
    } 
    public function playVideo():void { 
     //play the video on the mediaDisplay 
    } 
    private function onProgress(event:ProgressEvent):void { 
     //ExternalInterface.call - report progress back to javascript 
    } 
} 

Чтобы проверить ExternalInterface более непосредственно, попробуйте позвонить

ExternalInterface.call("alert", "Hello World!"); 
+0

Спасибо, что я думал, что метод обратного вызова был для. Любые идеи относительно того, почему я не вижу предупреждения (в моем коде)? – danwoods

+0

Попробуйте найти свойство ExternalInterface.available. Он сообщает вам, работает ли вспышка в контейнере, разрешая вызовы ExtInt. Подробнее @ http://livedocs.adobe.com/flex/2/langref/flash/external/ExternalInterface.html –

+0

с чем-то вроде этого? // тестирование внешних вызовов .js импорт flash.external.ExternalInterface; // доступен внешний интерфейс? var isAvailable: Boolean = ExternalInterface.available; след (isAvailable); Что я должен искать, когда я запускаю это? – danwoods

0

Как другие говорили в комментариях к посту Йохана, вы должны сначала проверить, если внешний интерфейс доступен по проверка ExternalInterface.available.

Помимо этого ... как вы запускаете приложение Flex? Сначала он должен быть включен в оболочку, содержащую этот JavaScript, конечно. Это тривиально. Однако если вы запустите его как файл из локальной файловой системы (URL-адрес браузера начинается с файла: //), вы также должны убедиться, что для файла SWF требуются разрешения для запуска функции JavaScript.

Вы должны доверять SWF-файлу, чтобы иметь возможность доступа к локальным ресурсам, таким как файлы, или JS в локальных файлах. Для этого создайте файл, например myapp.cfg, и добавьте путь к файлу в виде отдельной строки в эту строку. Поместите этот файл в папку FlashPLayerTrust. В системах Linux это ~/.macromedia/Flash_Player/# Security/FlashPlayerTrust /.

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