Just one gotcha to watch out for... Mozilla doesn't
recognize getVariable/setVariable. It must be GetVariable/SetVariable (note
capital initial letter). IE will allow either one.
matt
Hi Tracy,
From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED] On Behalf Of Abdul Qabiz
Sent: Thursday, April 28, 2005 12:52 AM
To: flexcoders@yahoogroups.com
Subject: RE: [flexcoders] Is there a _javascript_ flashObj.callFunction(), like setVariable?
There is no callFunction(..) like method for flash activeX or plugin. But
there is setVariable(..) method.
Yes, you can set a variable or setter from _javascript_ using setVariable
function. I have create a example, it allows you to execute flex function
from _javascript_...
It's very basic example but you can adopt similar approach and do it more OO
way by creating classes in JS and AS...
1) FlexJSExample.jsp
<%@ taglib uri="FlexTagLib" prefix="mm" %>
<HTML>
<HEAD>
<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
<TITLE>Flex-JS Communication Demo</TITLE>
<script language="_javascript_">
//this function return to Flash ActiveX Object or Plugin depending upon
browser
//it takes care for browser type and returns the proper reference.
//Accepts the id or name of <OBJECT> or <EMBED> tag respectively
function thisMovie(movieName) {
// IE and Netscape refer to the movie object differently.
// This function returns the appropriate syntax depending on the browser.
if (navigator.appName.indexOf ("Microsoft") !=-1) {
return window[movieName];
} else {
return window.document[movieName];
}
}
/**###############################################**/
//success flag, set by flash/flex app
var bFunctionCallFinished = true;
//param delimiter, kind of unique string
var paramDelimiter = "-->$$###$$##$$<--";
//this function would call a flash/flex function.
function callFlashFunction(functionName, paramsArray)
{
if(bFunctionCallFinished)
{
//Get the reference so activeX or Plugin.
var flashObject = thisMovie("flexApp");
bFunctionCallFinished = false;
flashObject.SetVariable("functionName", functionName);
flashObject.SetVariable("functionParams",
paramsArray.join(paramDelimiter));
flashObject.SetVariable("commitFunctionCall", true);
}
else
{
//if previous function call is still being run, you can use
setTimeOut etc to call it little later...
}
}
/**###############################################**/
</script>
</HEAD>
<BODY bgcolor="#FFFFFF">
<!-- look at "flexApp" id/name, thats being used(in JS) to get the reference
of Flash Player in browser. -->
<mm:mxml border="1" id="flexApp" name="flexApp">
<mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml" width="600"
height="600" backgroundColor="#FFFFFF" >
<mx:Script>
<![CDATA[
/**################################################**/
//the name of the function to be called.
var functionName:String;
//the params delimited by paramDelimiter
var functionParams:String;
//param delemiter, kind of unique string
var paramDelimiter = "-->$$###$$##$$<--";
//setter, which executes the function and send the success flag back to
_javascript_
public function set commitFunctionCall(flag:Boolean):Void
{
var func:Function = this[functionName];
func.apply(this, functionParams.split(paramDelimiter));
getURL("_javascript_:bFunctionCallFinished=true;void(0)");
}
/**################################################**/
function sayHi(name:String)
{
alert("Hi " + name);
_ta.text += name + newline;
}
function setNum()
{
var n = arguments.length;
for(var i=0;i<n;i++)
{
_ta.text += arguments[i] + newline;
}
}
]]>
</mx:Script>
<mx:TextArea id="_ta" width="200" height="200"/>
</mx:Application>
</mm:mxml>
<input type="button" value="Say Hi" />
<input type="button" value="Send Number"
/>
</BODY>
</HTML>
BTW! Based on above principle, I made a JS-Flash libarary long back. Take a
look at it for an idea...
http://www.abdulqabiz.com/files/JSFC/JSFCommunicator%20Library.htm
Hope that helps
-abdul
________________________________
From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED]
Sent: Thursday, April 28, 2005 9:56 AM
To: flexcoders@yahoogroups.com
Subject: [flexcoders] Is there a _javascript_ flashObj.callFunction(), like
setVariable?
Using javasript in a custom HTML wrapper, Is there flashObj.callFunction(),
like there is a setVariable() method?
Or will setVariable() work with a setter method? (Hmm, surely I can create a
setter in mxml, right?)
Tracy
________________________________
Yahoo! Groups Links
* To visit your group on the web, go to:
http://groups.yahoo.com/group/flexcoders/
* To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>
* Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service
<http://docs.yahoo.com/info/terms/> .
Yahoo! Groups Links
- To visit your group on the web, go to:
http://groups.yahoo.com/group/flexcoders/
- To unsubscribe from this group, send an email to:
[EMAIL PROTECTED]
- Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.