Using ExternalInterface in Flash

2019-01-19 23:34发布

I'm trying to edit some flash to make an external javascript function call, but with no success. Here's my actionscript 2.0 code:

//testing external .js calls

import flash.external.ExternalInterface;

//attempting to make external js call

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

and here's my javascript;

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

I've seen lots of examples and I'm mainly confused about the use of ExternalInterface.addCallback. I don't need the javascript to return anything to flash, so is this necessary?

For whatever reason, I never see the alert. Does anyone see any problems in my code? Is there some ExternalInterface library I don't have? Also, what's the BEST way to use ExternalInterface (ie; error checking, etc.) Thanks in advance...

2条回答
小情绪 Triste *
2楼-- · 2019-01-20 00:01

ExternalInterface.addCallback is for javascript to be able to call into your Flash application. If for example you want a HTML button that starts/stops a video you just add a callback for a named method and your js can than call [FlashObject].callback method name.

I would say that the best way to add ExternalInterface methods in your application is to set up a class responsible for JS communication for each interaction case in the app. For example:

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
    }
}

To test ExternalInterface more directly, try calling

ExternalInterface.call("alert", "Hello World!");
查看更多
Ridiculous、
3楼-- · 2019-01-20 00:10

As others said in the comments to the post of Johan, you should first check, if the External Interface is available by checking ExternalInterface.available.

Other than that... how do you launch the Flex Application? First it must be included in a wrapper that contains this JavaScript of course. That's trivial. However in case you launch it as file from the local filesystem (browser URL starts with file://) then you must also make sure that the SWF file has the required permissions to run a JavaScript function.

You must trust the SWF file to make it able to access local resources like files, or JS on local files. To do that create a file like myapp.cfg and add the path to your file as a single line to this line. Place this file in the FlashPLayerTrust folder. On Linux systems this is ~/.macromedia/Flash_Player/#Security/FlashPlayerTrust/.

查看更多
登录 后发表回答