ProblemYou want to call an ActionScript function from JavaScript. SolutionUse ExternalInterface.addCallback( ) to register the ActionScript function, and then call the function from the JavaScript reference to the Flash Player object. DiscussionThe ExternalInterface API allows you to register ActionScript functions, which makes them accessible to JavaScript. Use the static addCallback( ) method to register the ActionScript functions. The addCallback( ) method requires two parameters: the name by which you want to be able to reference the function from JavaScript and a reference to the function. The following example registers a function called displayMessage using an identifier (the name by which the function can be called from JavaScript) of showMessage: ExternalInterface.addCallback("showMessage", displayMessage); From JavaScript, you need to get a reference to the Flash Player object. There are two basic Flash Player versions that run in the browser: ActiveX and the plug-in version. The ActiveX version runs natively in Internet Explorer, while the plug-in version is used by the rest of the browsers. The ActiveX player is controlled by the <object> tag in an HTML page, and you can retrieve a JavaScript reference using window. objectId where objectId is the value of the id attribute of the <object> tag. For example, if the <object> tag's id attribute is example, then the reference to the ActiveX player would be window.example. The plug-in player is controlled by the <embed> tag in an HTML page, and you can retrieve a JavaScript reference by using window.document. embedName, where embedName is the value of the name attribute of the <embed> tag. For example, if the <embed> tag's name attribute is example, then the reference to the plug-in player would be window.document.example. In most cases, you probably won't know which Flash Player version the user will have. You can use navigator.appName in JavaScript to determine which browser the user has:
Use the following JavaScript to detect which version of the player the user has and retrieve the correct reference: <script language="JavaScript"> var flashPlayer; function detectFlashPlayer( ) { if(navigator.appName.indexOf("Microsoft") != -1) { flashPlayer = window.objectId; } else { flashPlayer = window.document.embedName; } } </script> Next, use the onLoad attribute in the <body> tag to call detectFlashPlayer( ) when the page loads, for example: <body onLoad="detectFlashPlayer"> The flashPlayer variable contains the correct reference to the Flash Player the user has on his system. You can call any registered ActionScript function directly from the Flash Player reference. For example, if a function has been registered with the identifier showMessage, the following calls that function from JavaScript (assuming flashPlayer is a variable referencing the Flash Player): flashPlayer.showMessage( ); You can pass parameters to the functions, as well. If the ActionScript function with the ExternalInterface identifier of showMessage accepts a string parameter, then you can call it from JavaScript as follows: flashPlayer.showMessage("example message"); See AlsoRecipe 22.1 |