分享

在各种浏览下html嵌入flash/flex以及flex和java相互调用的简单例子

 水晶涟漪 2010-04-20

在各种浏览下html嵌入flash/flex以及flexjava相互调用的简单例子

JAVA参考代码:

<!-- javascript 代码如下-->

<script type=”text/javascript”>

function testPageInit(){

  alert(“hello flash”);

var myFlashMovie=window.document[“myFlashMovie”];

var dataStr=”10,20,30”

myFlashMovie.setTestValue(dataStr);

}

function changePageTitleName(){

document.title=”Flex Changed the Title”;

}

</script>

<!-- html 代码如下-->

<table width=”100%” height=”100%”>

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
           codebase=http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab

id="myFlashMovie" width=”100%” height=”100%” type=”application/x-oleobject”>
      <param name=”movie” value="test.swf"/>

<param name=”quality” value="high"/>

<param name=”wmode” value="transparent"/>

<param name=”bgcolor” value="#869ca7"/>

<param name=”allowScriptAccess” value="sameDomain"/>

<param name=”FlashVars” value="onload=testPageInit"/>

<embed src="test.swf"

width=”100%” height=”100%” type="application/x-shockwave-flash"

 play=”true” name="myFlashMovie"

id="myFlashMovie" align=”middle” bgcolor=”#FFFFFF”
       quality=”high”

flashvars=” onload=testPageInit

loop=”false”

wmode=” transparent”

allowScriptAccess=” sameDomain

pluginspage=http://adobe.com/go/getflashplayer>
      </embed >

</object >

</table>

FLEX参考代码:

<?xml version=”1.0” encoding=”utf-8”>

<mx:Application creationComplete=”init()” xmlns:mx=”http://www.adobe.com/2006/mxml

 Layout=”absolute”>

<mx:Script>

      <![CDATA[

      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,””);

}

</mx:Script>

<mx:Button click=” callJavascript()”/>

<mx:Label text={_testValue}/>

</mx:Application>

注意事项:

1.       html嵌入flex调用在javascript中调用flex方法的例子流程

上面举的例子的功能是通过外面传个值来改变FLEX内部一个变量的值

首先html页面加载页面元素,将object加载进来,加裁object后通过onload方法自动调用javascript方法testPageInit();

其次testPageInit()方法里我们要调用对象IDmyFlashMovieflex内部方法,要获取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部分,在这里需要指定idname且名称一样,而且flashvars参数要用。保持object 中的<param>的参数项和参数值和embed里的参数相同。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多