Please try following:
Main.as
package
{
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;
import flash.external.ExternalInterface;
import flash.text.TextField;
/**
* <p>ExternalInterface example</p>
* <p><b>author:</b> Lukasz 'Severiaan' Grela</p>
* @author Lukasz 'Severiaan' Grela
*/
public class Main extends Sprite
{
protected var m_oOutput:TextField;
//---------------------------------------
//Group: CONSTRUCTOR
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
protected function ei_invokeFunction(p_sMethod:String, ...args):void
{
//info("ei_invokeFunction(p_sMethod:String=" + p_sMethod + ", ...args=[" + args + "]):void");
switch (p_sMethod)
{
case "func1":
func1.apply(this, args);
break;
case "func2":
func2.apply(this, args);
break;
}
}
protected function func1(num1:Number, num2:Number, num3:Number):void
{
m_oOutput.text = "func1(num1=" + num1 + ", num2=" + num2 + ", num3=" + num3 + ");";
}
protected function func2(str1:String, num2:Number, str3:String):void
{
m_oOutput.text = "func2(str1=" + str1 + ", num2=" + num2 + ", str3=" + str3 + ");";
}
protected function run():void
{
// entry point
m_oOutput = new TextField();
m_oOutput.x = m_oOutput.y = 5;
m_oOutput.width = 480;
m_oOutput.height = 320;
m_oOutput.multiline = true;
m_oOutput.wordWrap = true;
m_oOutput.border = true;
addChild(m_oOutput);
//prepare the ExternalInterface hook-up
if (ExternalInterface.available)
{
try {
ExternalInterface.addCallback("invokeFunction", ei_invokeFunction);
m_oOutput.text = "ExternalInterface is available."
}
catch (err:*)
{
m_oOutput.text = "ExternalInterface is not available. \nError:" + err;
}
}
else
{
m_oOutput.text = "ExternalInterface is not available.";
}
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
//
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.addEventListener(Event.RESIZE, onStageResized, false, 0, true);
run();
}
}
}
index.htm
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<title>external_interface_test</title>
<meta name="description" content="" />
<script src="js/swfobject.js"></script>
<script>
var flashvars = {
};
var params = {
menu: "false",
scale: "noScale",
allowFullscreen: "true",
allowScriptAccess: "always",
bgcolor: "",
wmode: "direct" // can cause issues with FP settings & webcam
};
var attributes = {
id:"core"
};
swfobject.embedSWF(
"externalinterfacetest.swf",
"altContent", "490", "330", "10.0.0",
"expressInstall.swf",
flashvars, params, attributes);
</script>
<script>
var $DEBUG = true;
//daft implementation only for testing - this should be replaced (the body of that function) with more accurate/reliable version
function getFlashMovie(movieName) {
var isIE = navigator.appName.indexOf("Microsoft") != -1;
return (isIE) ? window[movieName] : document[movieName];
}
/**
* Reference to the "core" SWF
*/
function getCore()
{
try
{
var movie = getFlashMovie("core");
}
catch(e)
{
if($DEBUG)
alert("getCore" + "\n" + e);
}
return movie;
}
//The "invokeFunction" is the registered callback method within SWF in query
/**
* wrapper for calling flash function
*/
function function1(num1, num2, num3)
{
try
{
getCore().invokeFunction("func1", num1, num2, num3);
}
catch(e)
{
if($DEBUG)
alert("func1" + "\n" + e);
}
}
/**
* wrapper for calling flash function
*/
function function2(str1, num2, str3)
{
try
{
getCore().invokeFunction("func2", str1, num2, str3);
}
catch(e)
{
if($DEBUG)
alert("func2" + "\n" + e);
}
}
</script>
<style>
html, body { height:100%; overflow:hidden; }
body { margin:0; }
</style>
</head>
<body>
<div id="altContent">
<h1>external_interface_test</h1>
<p><a href="http://www.adobe.com/go/getflashplayer">Get Adobe Flash player</a></p>
</div>
<div id="eiMenu">
<a href='#' onclick='javascript:function1(1, 2, 3);return false;'>Function 1</a>|
<a href='#' onclick="javascript:function2('a', 2, 'c');return false;">Function 2</a>
</div>
</body>
</html>
and this are screengrabs:
You can try to run this and let me know your output, I've tested on FF27