Hi all,
I have tried this for a couple of days. I created a swf object in window.onload (also tried load it directly), call an as function from js. statically embedded swf works for both IE8 and FF, FF also fine for dynamically loading. externalinterface.call(“echo”, "as returns " + b); always shows “as returns false”. Someone please help!
//js
<script language=“javascript”>
var containerready=false,flashready=false;
function addLoadEvent(func) {var oldonload = window.onload; if (typeof window.onload != ‘function’) {
window.onload = func; } else { window.onload = function() { if (oldonload) { oldonload(); } func(); }}
}
function embedswf(){
var a,swf="<object classid=‘clsid:d27cdb6e-ae6d-11cf-96b8-444553540000’";
swf+=" codebase=‘http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0’";
swf+=" width=‘215’ height=‘318’ id=‘testswf1’ align=‘middle’>";
swf+=" <param name=‘allowScriptAccess’ value=‘always’ />";
swf+=" <param name=‘allowFullScreen’ value=‘false’ />";
swf+=" <param name=‘movie’ value=‘testswf1.swf’ />";
swf+=" <param name=‘quality’ value=‘high’ />";
swf+=" <param name=‘wmode’ value=‘transparent’ />";
swf+=" <embed src=‘testswf1.swf’ quality=‘high’ wmode=‘transparent’ width=‘215’ height=‘318’ name=‘testswf1’ align=‘middle’ allowScriptAccess=‘always’ allowFullScreen=‘false’ type=‘application/x-shockwave-flash’ pluginspage=‘http://www.adobe.com/go/getflashplayer’ /></object>";
a=document.createElement(“div”);
a.id=“swfholder”;
a.innerHTML=swf;
document.body.appendChild(a);
containerready=true;
window.setTimeout(callas, 100);
}
addLoadEvent(embedswf);
function echo§{ alert§}
function callas()
{
// alert(“callas:containerready=”+containerready+";fl ashready="+flashready);
containerready=true;
if(flashready){
var a=getswf();
a&&(a.flashfunc())
return
}
window.setTimeout(callas, 100);
}
function setflashready()
{
flashready=true;
}
function getcontainerready()
{
//alert(“getcontainerready:g31=”+containerready+";fl ashready="+flashready);
return containerready;
}
function getswf()
{
if (navigator.appName.indexOf(“Microsoft”) != -1)
return window[“testswf1”];
else
return document[“testswf1”];
}
</script>
//as
import flash.external.ExternalInterface;
flash.system.Security.allowDomain("*");
var rtm:Timer = new Timer(500);
startTest();
function f0():void {
ExternalInterface.call(“echo”, “one”);
}
function timerHandler(event:TimerEvent):void
{
if (isContainerReady())
{
rtm.stop();
rtm.removeEventListener(TimerEvent.TIMER, timerHandler);
setupCallbacks();
}
}
function startTest():void
{
if (ExternalInterface.available)
{
try
{
if (isContainerReady())
{
setupCallbacks();
}
else
{
rtm.addEventListener(TimerEvent.TIMER, timerHandler);
rtm.start();
}
}
catch(error:Error) {
trace("An Error occurred: " + error.message + "
");
}
}
else
{
trace(“External interface is not available for this container.”);
}
}
function isContainerReady():Boolean
{
var b:Boolean = ExternalInterface.call(“getcontainerready”);
ExternalInterface.call(“echo”, "as returns " + b);
return b;
}
function setupCallbacks():void
{
ExternalInterface.call(“echo”,“setupcallback”);
ExternalInterface.addCallback(“flashfunc”, f0);
ExternalInterface.call(“setflashready”);
}