Search code examples
javascriptflashactionscriptexternalinterface

ExternalInterface and Javascript not working in harmony


The other day I posted about a Flash/Javascript issue I was having. Please see this: Issues with javascript properly loading and seeing everything I know how I want to fix it, but I am not in any way shape or form familiar with actionscript. I have avoided adobe products like the plague from when I was developing myself since it costs a fortune to buy and of their products, but big employers love it and pay for it so here I am. Our "Flash" guy just left the team and I inherited this issue. If you read my other post you know what is going on so I will move on. I want to make a simple call from actionscript to my javascript taht is referenced in my other post. I specifically want to call the CheckboxCollection function from inside of actionscript. I don't need to pass it any args or anything of the such from inside of actionscript. All I need it to do is run that function once the flash is done loading. The javascript function will take care of everything I need, I just HAVE TO HAVE IT called from actionscript to make everything work in harmony. I am in the middle of teaching myself all things adobe and actionscript(much to my dismay), but I really have no clue where top go from here to make this work. I have reviewed adobe documentation, but until I have a better grasp of the language as a whole I am still lost. I copied most of my actionscript on to here, but I did leave out everything that had to deal with mouseover events, since my issue is not about a mouseover and they all work like a charm. Thanks in advance! -------------------------------------------------------------------------------------------UPDATE: I had to stop working on this to get some other things done, but I am back to step one. NO matter what I do I am having no luck making this work. I have tried all suggestions on here, and tried everything I KNOW how to do, but I am having no luck. If anyone could take a look at this post and the one that I link to (It is the companion javascript for this) and see if they can come up with anything. I have tried so many different iterations of my code there is no use putting all of my trials up for example of what doesn't work, Thanks Everyone!

/*
JavaScript External Calls
*/
function RegisterExternalCalls():void
{ 
if(ExternalInterface.available)
    ExternalInterface.addCallback("HighlightWheel", HighlightWheel);
}
function HighlightWheel($args:String,$show:String,...arguments):void
{   
$args = $args == "financial"?"center":$args;
var _obj:Object = ObjectCollection[$args].Objects.Click;


if(ObjectCollection[$args].Objects.currentObject.name.toLowerCase() == "center")
{
    bcenter = true;
    _obj =  ObjectCollection[$args].Objects.currentObject.getChildByName("financialBtn");
}

if(CBool($show))
{

    if(arguments.length > 0 && arguments[0] == "TITLE") // || $args == "center")
        _obj.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_OVER));
    else
    {

        if(ObjectCollection[$args].labels.Label.toUpperCase() === "CENTER")
        {
            ObjectCollection["income"].Objects.Click.gotoAndPlay(2);
            ObjectCollection["property"].Objects.Click.gotoAndPlay(2);
            ObjectCollection["education"].Objects.Click.gotoAndPlay(2);
            ObjectCollection["health"].Objects.Click.gotoAndPlay(2);
            ObjectCollection["retirement"].Objects.Click.gotoAndPlay(2);

        }
        else
        {               
            _obj.gotoAndPlay(2);

        }
    }


}
else
{
    if(arguments.length > 0 && arguments[0] == "TITLE")
        _obj.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_OUT));
    else
    {
        if(ObjectCollection[$args].labels.Label.toUpperCase() === "CENTER")
        {
            ObjectCollection["income"].Objects.Click.gotoAndPlay(11);
            ObjectCollection["property"].Objects.Click.gotoAndPlay(11);
            ObjectCollection["education"].Objects.Click.gotoAndPlay(11);
            ObjectCollection["health"].Objects.Click.gotoAndPlay(11);
            ObjectCollection["retirement"].Objects.Click.gotoAndPlay(11);


        }
        else
        {
            _obj.gotoAndPlay(11);

        }
    }
}
}

function CallExternalFunction($label:String,$show:Boolean = true):void
{
var lbl:String = $label.toLowerCase().indexOf("btn") > -1?"financialTitle":$label     + "Title";

    if(ExternalInterface.available)
         ExternalInterface.call("COUNTRY.Financial.highlightProductGroup",lbl,$show);


}

function CBool($value:String):Boolean
{
if($value == "true")
    return true;
else
    return false;
}

function PrintSetup($evt:MouseEvent):void
{
var pjob:PrintJob = new PrintJob(); 
if(pjob.start())
{       
    pjob.addPage(wheel);

    pjob.send();
}

}

Solution

  • I believe you do this through ExternalInterface.call and pass the javascript function that should be called, like so:

    ExternalInterface.call( "CheckboxCollection" )
    

    If you need to pass arguments:

    ExternalInterface.call( "CheckboxCollection", value1, value2 )
    

    For more information here is the documentation