FlashでのExternalInterfaceの使用
-
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!");
他のヒント
Johanの投稿へのコメントで他の人が言ったように、ExternalInterface.availableをチェックして、外部インターフェイスが利用可能かどうかを最初に確認する必要があります。
それ以外... Flexアプリケーションをどのように起動しますか?最初に、もちろんこのJavaScriptを含むラッパーに含める必要があります。それは簡単です。ただし、ローカルファイルシステムからファイルとして起動する場合(ブラウザーURLはfile://で始まります)、SWFファイルにJavaScript関数を実行するために必要な権限があることも確認する必要があります。
SWFファイルを信頼して、ファイルやローカルファイル上のJSなどのローカルリソースにアクセスできるようにする必要があります。そのためには、myapp.cfgなどのファイルを作成し、この行に1行でファイルへのパスを追加します。このファイルをFlashPLayerTrustフォルダーに配置します。 Linuxシステムでは、これは〜/ .macromedia / Flash_Player /#Security / FlashPlayerTrust /です。