Использование ExternalInterface во Flash
-
03-07-2019 - |
Вопрос
Я пытаюсь отредактировать флэш-память для вызова внешней функции javascript, но безуспешно. Вот мой код Actionscript 2.0:
//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
(т. Е. Проверку ошибок и т. Д.) Заранее спасибо ...
Решение
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!");
Другие советы
Как говорили другие в комментариях к сообщению Йохана, сначала нужно проверить, доступен ли внешний интерфейс, проверяя ExternalInterface.available.
Кроме этого ... как запустить приложение Flex? Сначала он должен быть включен в оболочку, которая содержит этот JavaScript, конечно. Это тривиально. Однако в случае, если вы запускаете его как файл из локальной файловой системы (URL браузера начинается с file: //), вы также должны убедиться, что SWF-файл имеет необходимые разрешения для запуска функции JavaScript. Р>
Вы должны доверять SWF-файлу, чтобы он мог обращаться к локальным ресурсам, таким как файлы, или JS для локальных файлов. Для этого создайте файл, подобный myapp.cfg, и добавьте путь к нему в виде одной строки в этой строке. Поместите этот файл в папку FlashPLayerTrust. В системах Linux это ~ / .macromedia / Flash_Player / # Security / FlashPlayerTrust /.