Basics of using the external API
Although in some cases a SWF file can run on its own (for example, if you use Adobe® Flash® Professional to create a SWF projector), in the majority of cases a SWF application runs as an element inside of another application. Commonly, the container that includes the SWF is an HTML file; somewhat less frequently, a SWF file is used for all or part of the user interface of a desktop application.
As you work on more advanced applications, you may find a need to set up communication between the SWF file and the container application. For instance, it's common for a web page to display text or other information in HTML, and include a SWF file to display dynamic visual content such as a chart or video. In such a case, you might want to make it so that when users click a button on the web page, it changes something in the SWF file. ActionScript contains a mechanism, known as the external API, that facilitates this type of communication between ActionScript in a SWF file and other code in the container application.
Important concepts and terms
The following reference list contains important terms relevant to this feature:
Container application
The application within which Flash Player is running a SWF file, such as a web
browser and HTML page that includes Flash Player content or an AIR application
that loads the SWF in a web page..
Projector
An executable file that includes SWF content and an embedded version of Flash
Player. You can create a projector file using Flash Professional or the
standalone Flash Player. Projectors are commonly used to distribute SWF files by
CD-ROM or in similar situations where download size is not an issue and the SWF
author wants to be certain the user will be able to run the SWF file, regardless
of whether Flash Player is installed on the user's computer.
Proxy
A go-between application or code that calls code in one application (the
"external application") on behalf of another application (the "calling
application"), and returns values to the calling application. A proxy can be
used for various reasons, including:
To simplify the process of making external function calls by converting native function calls in the calling application into the format understood by the external application.
To work around security or other restrictions that prevent the caller from communicating directly with the external application.
Serialize
To convert objects or data values into a format that can be used to pass the
values in messages between two programming systems, such as over the Internet or
between two different applications running on a single computer.
Working through the examples
Many of the code examples provided are small listings of code for demonstration purposes rather than full working examples or code that checks values. Because using the external API requires (by definition) writing ActionScript code as well as code in a container application, testing the examples involves creating a container (for example, a web page containing the SWF file) and using the code listings to interact with the container.
To test an example of ActionScript-to-JavaScript communication:
Create a new document using Flash Professional and save it to your computer.
From the main menu, choose File > Publish Settings.
In the Publish Settings dialog box, on the Formats tab, confirm that the Flash and HTML check boxes are selected.
Click the Publish button. This generates a SWF file and HTML file in the same folder and with the same name that you used to save the document. Click OK to close the Publish Settings dialog box.
Deselect the HTML check box. Now that the HTML page is generated, you are going to modify it to add the appropriate JavaScript code. Deselecting the HTML check box ensures that after you modify the HTML page, Flash will not overwrite your changes with a new HTML page when it's publishing the SWF file.
Click OK to close the Publish Settings dialog box.
With an HTML or text editor application, open the HTML file that was created by Flash when you published the SWF file. In the HTML source code, add opening and closing
script
tags, and copy into them the JavaScript code from the example code listing:<script>
// add the sample JavaScript code here
</script>Save the HTML file and return to Flash.
Select the keyframe on Frame 1 of the Timeline, and open the Actions panel.
Copy the ActionScript code listing into the Script pane.
From the main menu, choose File > Publish to update the SWF file with the changes that you've made.
Using a web browser, open the HTML page you edited to view the page and test communication between ActionScript and the HTML page.
To test an example of ActionScript-to-ActiveX container communication:
Create a new document using Flash Professional and save it to your computer. You may want to save it in the folder where your container application will expect to find the SWF file.
From the main menu, choose File > Publish Settings.
In the Publish Settings dialog box, on the Formats tab, confirm that only the Flash check box is selected.
In the File field next to the Flash check box, click the folder icon to select the folder into which your SWF file will be published. By setting the location for your SWF file, you can (for example) keep the document in one folder, but put the published SWF file in another folder such as the folder containing the source code for the container application.
Select the keyframe on Frame 1 of the Timeline, and open the Actions panel.
Copy the ActionScript code for the example into the Script pane.
From the main menu, choose File > Publish to re-publish the SWF file.
Create and run your container application to test communication between ActionScript and the container application.
For full examples of using the external API to communicate with an HTML page, see the following topic:
Those examples include the full code, including ActionScript and container error-checking code, which you should use when writing code using the external API. For another full example using the external API, see the class example for the ExternalInterface class in the ActionScript 3.0 Reference.