Flex嵌入在页面中时,JS和as的相互调用是比较常用的技巧。在普通嵌入下,JS和as相互调用的资料比较常见
import flash.external.ExternalInterface;
引入ExternalInterface即可解决
详见:http://blog.csdn.net/qq1113130712/article/details/41007009
在嵌入IFrame的情况下,对嵌入的页面进行JS互调,和正常嵌入略有不同
嵌入代码:
// 嵌入IFrame <mx:Panel id="NoticePanel" height="141" layout="absolute" right="10" top="15" title="嵌入调用" width="330"> <ns1:IFrame top="0" left="0" bottom="0" right="0" id="TestCallJs" enabled="true"> </ns1:IFrame> </mx:Panel>
Iframe as to js:
Flex:
// 调用 TestCallJs.callIFrameFunction("TestMsgSend", null, JsCallFinish);JavaScript:
funtion TestMsgSend() { return "as to Js Call" }
当Js函数执行完毕之后,会触发Flex的JsCallFinish函数,JsCallFinish的参数为JS函数的返回值(本示例为“as to Js Call”)。
IFrame js to as:
IFrame框架下页面的JS回调Flex页面的as函数,资料比较少。
通过观察嵌入IFrame后的页面可以看出,嵌入了IFrame之后,并不是真正的嵌入Flex中,而是在页面上覆盖一个div嵌套的Frame框架摆放在IFrame的位置。因此,IFrame嵌套页面下的JS调用Flex的as可以看作是网页Frame框架下的JS对主页面的调用。
Flex
// 函数定义 public function downloadShareFile(FileName:String):void { //Alert.show(FileName); } // 挂载调用接口 ExternalInterface.addCallback("downloadFile", downloadShareFile);
JavaScript
function callas() { var ascall = 'test call'; parent.window.document.getElementById("TestCallJs").downloadFile(ascall); }