Search code examples
actionscript-3web-applicationsfile-uploadactionscript

ActionScript: To perform non graphical operations


As I understand, ActionScript is used mostly to control graphical output on Flash websites: such as Flash based games.

However, I would like ActionScript to perform tasks not related to graphical output. Tasks, which for browser compatibility reasons, are more suitable for ActionScript: such as file upload.

Is it therefore possible to use ActionScript instead of JavaScript or to accomplish tasks that are not possible with JavaScript, such as file upload?

Are the following possible?

  • Run ActionScript on HTML Button Press?
  • Send information to ActionScript from HTML/JavaScript?
  • Process information without any graphical output in ActionScript?
  • Ouptut information from ActionScript to HTML/JavasScript?

I wish to know, if ActionScript can do what I wish.

I will have a picture of the right functions to call.


Solution

  • ExternalInterface is your friend: http://help.adobe.com/nl_NL/Flash/CS5/AS3LR/flash/external/ExternalInterface.html

    Some tips when using ExternalInterface:

    • set allowScriptAccess to "always" in the html embed code
    • make sure the flash has an id in your html code

    Some simple examples:

    1. Grab a value from javascript to flash

    // actionscript 3 code
    if (ExternalInterface.available)
    {
      var url:String = ExternalInterface.call("document.location");
    
      // output to textfield
      var t:TextField = new TextField();
      addChild(t);
      t.text = url;
    }
    

    2. Call a function with parameters from flash

    // actionscript 3 code 
    if (ExternalInterface.available)
    {
       var result:String = "Flash rocks"
       ExternalInterface.call("alert", result);
    }
    

    3. Call from javascript a function with parameters to Flash:

    // javascript
    window.onLoad = function()
    {
       document.getElementById('flashId').doSomething("javascript rocks");
    }
    

    .. and

    // actionscript 3
    
    if (ExternalInterface.available)
    {
       ExternalInterface.addCallback("doSomething", handleSomethingFromJavascript);// links js function to as3 function
       function handleSomethingFromJavascript(value:String):void
       {
          // output to textfield
          var t:TextField = new TextField();
          addChild(t);
          t.text = value;
       }
    }
    

    You can do lots of stuff between flash and javascript, as you can see the intergration is almost painless! The only note is that within flash ExternalInterface is not available, so you have to test in browser. You can make a transparent Flash object using wmode="transparent". You cannot use display:none or visibility (css) because then the flash isnt executed or acts slower. To make sure it keeps running, place it position:fixed (css) on the page in a corner or something. Browsers make flash object run in a sort of sleep mode (slower) when out of screen or when inactive (ie in an inactive tab)