flex与JavaScript的数据交互
上一篇发了 flex3 接受外部参数 ,但是后来想想,应该更进一步的了解 flex与JavaScript的数据交互。第一种:
test4.swf 代码:
<?xml version="1.0" encoding="utf-8"?><mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal" horizontalAlign="left"><mx:Script><!]></mx:Script><mx:Button label="Click me" click="myClick(event);"/><mx:TextArea id="display" height="70"/></mx:Application>
html:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=euc-kr" /><title>flex</title><head><script type="text/javascript">function myfunc(item) { document.getElementById('ihere').innerHTML = 'My name is ' + item.name + ', and I live in ' + item.address + '.'; //创建对象 var results = new Object(); results.song= 'Come Together !'; results.singer = 'MJ'; results.year = '1995'; return results;}</script></head><body><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="300" height="150"> <param name="allowScriptAccess" value="always"> <param name="movie" value="test4.swf"> <param name="allowFullScreen" value="true"></param> <param name="quality" value="high"> <param name="bgcolor" value="#ffffff"> <PARAM name="wmode" value="transparent"> <embed src="test4.swf" quality="high" wmode="transparent" bgcolor="#ffffff" width="300" height="150" allowScriptAccess="always" allowfullscreen="true" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /></object><br> Output: <div id="ihere"></div></body></html> 第二种:
test4.swf 代码
<?xml version="1.0" encoding="utf-8"?><mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"layout="horizontal" horizontalAlign="center" initialize="initApp()"><mx:Script><!]></mx:Script><mx:VBox><mx:HBox> <mx:Label text="Callback"/> <mx:TextInput id="nameTxt"/> </mx:HBox><mx:HBox> <mx:Label text="Geturl"/> <mx:TextArea id="display" height="70"/> </mx:HBox></mx:VBox></mx:Application>
html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><title></title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><script type="text/javascript" src="swfobject.js"></script><script type="text/javascript">var flashvars = {playname: "test4.swf",videoname: "my player",wear: "clothes"};var params = {wmode: "transparent",bgcolor: "#ffffff",allowFullScreen: "true",allowScriptAccess: "always",quality: "high"};var attributes = {};attributes.id = "flashContent";swfobject.embedSWF("test4.swf", "flashContent", "300", "150", "9.0.0", "expressInstall.swf", flashvars, params, attributes);function callFlex(item) {//通过ID获得swf,也可以使用document.getElementById();//var swf = document.getElementById("flashContent");var swf = swfobject.getObjectById("flashContent");var item = {};item.name = document.getElementById("nameTxt").value;//调用Flex函数,传参item:Objectswf.backFun(item);}</script></head><body><div id="flashContent"><a href="http://www.adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></div><table><tr><td>Name</td><td><input type="text" id="nameTxt"/></td></tr><tr><td colspan="2"><a href="javascript:callFlex();">Call Flex</a></td></tr></table></body></html> 关于SWFObject,请参看flex3 接受外部参数
SWFObject使用补充:
swfobject.embedSWF()
swfobject.getObjectById("swfID")
swfobject.removeSWF("swfID")
一.swfobject.embedSWF:
内嵌swf文件,这个函数的参数比较多swfobject.embedSWF(swfUrl, id, width, height, version,expressInstallSwfurl, flashvars,params, attributes),各个参数具体功能如下:
[*]swfUrl(String,必须的)指定SWF的URL。
[*]id(String,必须的)指定将会被Flash内容替换的HTML元素(包含你的替换内容)的id。
[*]width(String,必须的)指定SWF的宽。
[*]height(String,必须的)指定SWF的高。
[*]version(String,必须的)指定你发布的SWF对应的Flash Player版本(格式为:major.minor.release)。
[*]expressInstallSwfurl(String,可选的)指定express install SWF的URL并激活Adobe express install。
[*]flashvars(String,可选的)用name:value对指定你的flashvars。
[*]params(String,可选的)用name:value对指定你的嵌套object元素的params。
[*]attributes(String,可选的)用name:value对指定object的属性。
注意:在不破坏参数顺序的情况下,你可以忽略可选参数。如果你不想使用一个可选参数,但是会使用后面的一个可选参数,你可以简单的传入false作为参数的值。对flashvars、params和 attributes这些JavaScript对象来说,你也可以相应的传入一个空对象{}。
二.swfobject.getObjectById("swfId")
通过swfid获得swf对象,通过该对象可调用flex函数。
三.swfobject.removeSWF("swfId") 通过swfId删除swf。
注意:删除swf这里需要提醒下,因为embedSWF是替换标签,而不是填充。比如上面的例子<div id="myPanel">Flex content</div>,如果执行了swfobject.removeSWF后,想重新添加SWF必须要重新创建<div id="myPanel">或者更改embedSWF的第二个参数更改替换新的标签ID。因为在这里SWF替换了调了<div>
另附:Javascript 和 ActionScript3 的交互
需要这个包
import flash.external.ExternalInterface;
这是一个静态类,主要用两个方法:
ExternalInterface.addCallback(给Javascript的接口,AS函数位置,AS函数名)ExternalInterface.call(Javascript函数名,传值) AS给做一个接口,然后Flash就可以访问AS的接口,从而可以调用AS的函数
ExternalInterface.addCallback("browse",this,upBrowse);
其中borwse是javascript可以调用flash 的接口,upBrowse是AS的函数
ExternalInterface.call("upAllComplete",upCount);
这个是AS调用Javascript的接口
其中upAllComplete是Javascript的函数,upCount是需要传递的参数
废话少说,例子上。
这个是AS调JS
AS代码:
ExternalInterface.call("upAllComplete",upCount);JS代码:
function upAllComplete(upData){ //upData是AS中的upCount传过来的值,可以是对象,数组,字符串 ,数字 alert(upData);}
这个是JS调用AS的(有点麻烦)
JS代码:
var movieName = "testcommand";//testcommand是HTML中Object的id和name,name和id要一样,这个是考虑到浏览器兼容性function thisMovie() { if (navigator.appName.indexOf ("Microsoft") !=-1) { return window; } else { return document; }}thisMovie().browse(toSwfData);//browse是swf函数upBrowse的映射名称
AS代码:
function upBrowse(jsData){ trace(jsData);}ExternalInterface.addCallback("browse",this,upBrowse);//映射upBrowse这个函数为接口browse
这个AS版本可以支持到Flash player7(貌似),不过flash本身在浏览器就提供一些接口,诸如:gotoAndPlay(),play(),stop()等等,这个用到的时候可以上网查一下。
页:
[1]