我试图想出如何将字符串值(url)从html表单传递给嵌入的flex对象。 我到目前为止找到的唯一方法是http://livedocs.adobe.com/flex/3/html/help.html?content=passingarguments_5.html中描述的“addCallback”方法 在我使用flex函数的例子中,“myFunc(s:String)”在“ExternalInterface”中注册,稍后从javascript中调用
<?xml version="1.0"?>
<!-- wrapper/AddCallbackExample.mxml -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="initApp()">
<mx:Script>
import flash.external.*;
import mx.controls.Alert;
public function initApp():void {
ExternalInterface.addCallback("myFlexFunction",myFunc);
}
public function myFunc(s:String):void {
Alert.show(s, 'Alert Box', mx.controls.Alert.OK);
}
</mx:Script>
<mx:Button id="myButton"
label="FLEX BUTTON"
click="Alert.show('FLEX LOADED!', 'Alert Box', mx.controls.Alert.OK);"/>
<mx:Label id="l1"/>
</mx:Application>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<SCRIPT LANGUAGE="JavaScript">
function callApp() {
mySwf.myFlexFunction("show me something");
}
</SCRIPT>
<form id="f1">
<button onClick="callApp()">HTML BUTTON</button>
</form>
<OBJECT CLASSID="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
WIDTH="850"
HEIGHT="610"
CODEBASE="http://active.macromedia.com/flash5/cabs/swflash.cab#version=5,0,0,0">
<EMBED SRC="mySwf.swf"
WIDTH="850"
HEIGHT="610"
PLAY="true"
LOOP="true"
QUALITY="high"
scale="noborder"
PLUGINSPAGE="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">
</EMBED>
</OBJECT>
</html>
该方法似乎根本不起作用。如果我按下Flex按钮 - 我可以看到Flex弹出对话框。当我按下HTML按钮时,通过ExternalInterface在Flex中调用myFunc - 没有任何内容 发生...我的代码中有任何指向错误的指针? 谢谢,
答案 0 :(得分:1)
如果您没有使用正确的浏览器,请尝试此操作:
<SCRIPT LANGUAGE="JavaScript">
// This function returns the appropriate reference,
// depending on the browser.
function getFlexApp(appName)
{
if (navigator.appName.indexOf ("Microsoft") !=-1)
{
return window[appName];
}
else
{
return document[appName];
}
}
function callApp() {
getFlexApp('mySwf').myFunc("show me something");
}
</SCRIPT>
你也没有给你的对象一个id,这就是DOM识别的方式
<OBJECT id='mySwf' CLASSID="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000">
试试这个:
ExternalInterface.addCallback("myFunc",myFunc);