在各种浏览下html嵌入flash/flex以及flex和java相互调用的简单例子
JAVA参考代码:
functiontestPageInit(){
alert(“hello flash”);
var myFlashMovie=window.document[“myFlashMovie”];
var dataStr=”10,20,30”
myFlashMovie.setTestValue(dataStr);
}
function changePageTitleName(){
document.title=”Flex Changed the Title”;
}
codebase=http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab
id="myFlashMovie" width=”100%” height=”100%” type=”application/x-oleobject”>
width=”100%” height=”100%” type="application/x-shockwave-flash"
play=”true” name="myFlashMovie"
id="myFlashMovie" align=”middle” bgcolor=”#FFFFFF”
quality=”high”
flashvars=” οnlοad=testPageInit”
loop=”false”
wmode=” transparent”
allowScriptAccess=”sameDomain”
FLEX参考代码:
Layout=”absolute”>
private var _testValue:String;
private function init():void{
ExternalInterface.addCallback(“setTestValue”, setTestValue);
}
public function setTestValue(str:String):void{
_testValue= str;
}
private function callJavascript():void{
var JSFunctionName:String=”changePageTitleName”;
ExternalInterface.call(JSFunctionName,””);
}
注意事项:
1.html嵌入flex调用在javascript中调用flex方法的例子流程
上面举的例子的功能是通过外面传个值来改变FLEX内部一个变量的值
首先html页面加载页面元素,将object加载进来,加裁object后通过onload方法自动调用javascript方法testPageInit();
其次在testPageInit()方法里我们要调用对象ID为myFlashMovie的flex内部方法,要获取object的对象通过用document.getElementById(“myFlashMovie”)这个方法来获得,但是考虑到跨浏览器的问题我们采用以下任意一种方式来获取ID,
一是window.document[“myFlashMovie”](在IE,FF,chrome,opera,safari等都适用)
二是window.document.myFlashMovie(这个未度过,应该可以)
然后通过定义的“object变量.方法”的形式调用即可,通过传递的参数给FLEX内部方法传值。
再然后,flex内部方法是如何获得到外部javascript的调用呢?首先加载flex的时候会运行flex的主应用程序,我们可以在主应用程序加裁完之后提供一个自动调用初始化方法,在这个方法里来回调javascript方法就可以了。具体参考上面的例子如ExternalInterface.addCallback(“setTestValue”, setTestValue);
最后通过调用setTestValue方法来改变FLEX当前_testValue变量的值。
2.html嵌入flex,由FLEX来调用javascript的例子流程
上面实现的功能是在flex中点击一个按钮就会使html的标题名称发生改变。
首先html页面加载页面元素,将object加载进来,加裁object后通过onload方法自动调用javascript方法testPageInit();
其次在testPageInit()方法里我们可以调用对象FLEX内部方法(参考上面流程例子)也可以不调用,我们这个例子主要是在FLEX调用JAVASCRIPT,当全部加载完了FLEX,在FLEX里我们可以加一个按钮控件用于点击测试,来触发方法,此方法里具体写如何调用JAVASCRIPT方法(参考上面代码)。
并且在JAVASCRIPT中定义和changePageTitleName名字一样的方法。
讨论:
1.我发现当需要获取object对象时用window.document[“myFlashMovie”];才能在跨浏览器时获得到对象。
2.当要对object对象进行显示时用document.getElementById(“myFlashMovie”).style.display=””;才好使,当要隐藏时用document.getElementById(“myFlashMovie”).style.display=”none”;才好使。用window.document[“myFlashMovie”] .style.display=””;或window.document[“myFlashMovie”] .style.display=” none”;不好使。
3.对于IE来讲不需要embed部分也可以得到flex,但对于其他的浏览可能不兼容所以需要走embed部分,在这里需要指定id和name且名称一样,而且flashvars参数要用。保持object中的的参数项和参数值和embed里的参数相同。