Usando ExternalInterface no Flash
-
03-07-2019 - |
Pergunta
Eu estou tentando editar alguns flash para fazer uma chamada de função javascript externo, mas sem sucesso. Aqui está o meu código do ActionScript 2.0:
//testing external .js calls
import flash.external.ExternalInterface;
//attempting to make external js call
ExternalInterface.call("createPlaylist","It's my Life!");
e aqui está o meu javascript;
function createPlaylist(mess){
alert("called createPlaylist: " + mess);
}
Eu vi muitos exemplos e estou principalmente confuso sobre o uso de ExternalInterface.addCallback
. Eu não preciso o javascript para retornar nada para flash, então isso é necessário?
Por alguma razão, eu nunca vejo o alerta. Alguém vê qualquer problema no meu código? Existe alguma biblioteca ExternalInterface
eu não tenho? Além disso, qual é a melhor maneira de usar ExternalInterface
(ie; a verificação de erros, etc.) Agradecemos antecipadamente ...
Solução
ExternalInterface.addCallback é para javascript para ser capaz de pôr em seu aplicativo Flash. Se por exemplo você quer um botão HTML que começa / pára um vídeo que você acabou de adicionar um retorno de chamada para um método chamado e seus js pode de chamar [FlashObject] .Callback nome do método.
Eu diria que a melhor maneira de adicionar métodos ExternalInterface em sua aplicação é a criação de uma classe responsável pela comunicação JS para cada caso interação no aplicativo. Por exemplo:
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
}
}
Para ExternalInterface teste mais diretamente, tente chamar
ExternalInterface.call("alert", "Hello World!");
Outras dicas
Como outros disseram nos comentários para o cargo de Johan, você deve primeiro verificar se a interface externa está disponível, verificando ExternalInterface.available.
Fora isso ... como você iniciar o aplicativo Flex? Primeiro ele deve ser incluído em um invólucro que contém esse JavaScript é claro. Isso é trivial. No entanto no caso de você lançá-lo como um arquivo do sistema de arquivos local (navegador URL começa com file: //), então você também deve certificar-se de que o arquivo SWF tem as permissões necessárias para executar uma função JavaScript.
Você deve confiar o arquivo SWF para torná-lo capaz de acessar recursos locais como arquivos, ou JS em arquivos locais. Para isso crie um arquivo como myapp.cfg e adicionar o caminho para o arquivo como uma única linha para esta linha. Coloque esse arquivo na pasta FlashPlayerTrust. Em sistemas Linux isso é ~ / .macromedia / Flash_Player / # Segurança / FlashPlayerTrust /.