chrishorne
asked on
FSCommand in innerHTML
I am trying to interface Flash with an nTier application that dynamically creates the web pages. These pages are created by Java Servlets generating JavaScript which writes the HTML to the innerHTML property of the layers. There is NO hard coded content at this level in the DOM.
JavaScript functions are no problem and when the VBSCript is Hard Coded, all is OK, but as innerHTML, the VBScript function that is called by the FSCommand just does not seem to exist at runtime (or if it does, Flash can't find it !)
I include a test page which illustrates the problem.
this uses the standard flash sample 'flash_to_javascript.swf'
I can't change the structure of our software so a solution must work with what we've got..
<HTML>
<BODY bgcolor="#FFFFFF">
<div id=component></div>
<div id=vbcode></div>
<script>
var sFlash = '<div id="test1" style="position: absolute; left: 226; top: 281; width: 390; height: 234; clip:rect(0px 390px 234px 0px);"><object classid="clsid:D27CDB6E-AE 6D-11cf-96 B8-4445535 40000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" width=300 height=200 name="myFlash" id="myFlash"><param name=movie value="flash_to_javascript .swf"><par am name=quality value=high><param name=bgcolor value=#FFFFFF><embed src="flash_to_javascript.s wf" quality=high bgcolor=#FFFFFF width=400 height=250 type="application/x-shockw ave-flash" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" name="myFlash"></embed></o bject></di v>';
var sVBCode = '<SCRIPT LANGUAGE=VBScript\>\nSub myFlash_FSCommand(ByVal command, ByVal args)\ncall myFlash_DoFSCommand(comman d, args)\nend sub\n<\/SCRIPT\\>';
document.all.component.inn erHTML = sFlash;
document.all.vbcode.innerH TML = sVBCode;
</script>
<!--div id="test1" style="position: absolute; left: 226; top: 281; width: 390; height: 234; clip:rect(0px 390px 234px 0px);"><object classid='clsid:D27CDB6E-AE 6D-11cf-96 B8-4445535 40000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0' width=300 height=200 name='myFlash' id='myFlash'><param name=movie value='flash_to_javascript .swf'><par am name=quality value=high><param name=bgcolor value=#FFFFFF><embed src="flash_to_javascript.s wf" quality=high bgcolor=#FFFFFF width=400 height=250 type="application/x-shockw ave-flash" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" name="myFlash"></embed></o bject></di v>
<div id="test1" style="position: absolute; left: 226; top: 281; width: 390; height: 234; clip:rect(0px 390px 234px 0px);"><SCRIPT LANGUAGE=JavaScript>var InternetExplorer = navigator.appName.indexOf( "Microsoft ") != -1;function myFlash_DoFSCommand(comman d, args) {var myFlashObj = InternetExplorer ? myFlash : document.myFlash;alert("Yo u entered: " + args);}if (navigator.appName && navigator.appName.indexOf( "Microsoft ") != -1 &&navigator.userAgent.inde xOf("Windo ws") != -1 && navigator.userAgent.indexO f("Windows 3.1") == -1) {document.write('<SCRIPT LANGUAGE=VBScript\> \n');document.write('on error resume next \n');document.write('Sub myFlash_FSCommand(ByVal command, ByVal args)\n');document.write(' call myFlash_DoFSCommand(comman d, args)\n');document.write(' end sub\n');document.write('</ SCRIPT\> \n');}</SCRIPT></div-->
</BODY>
</HTML>
JavaScript functions are no problem and when the VBSCript is Hard Coded, all is OK, but as innerHTML, the VBScript function that is called by the FSCommand just does not seem to exist at runtime (or if it does, Flash can't find it !)
I include a test page which illustrates the problem.
this uses the standard flash sample 'flash_to_javascript.swf'
I can't change the structure of our software so a solution must work with what we've got..
<HTML>
<BODY bgcolor="#FFFFFF">
<div id=component></div>
<div id=vbcode></div>
<script>
var sFlash = '<div id="test1" style="position: absolute; left: 226; top: 281; width: 390; height: 234; clip:rect(0px 390px 234px 0px);"><object classid="clsid:D27CDB6E-AE
var sVBCode = '<SCRIPT LANGUAGE=VBScript\>\nSub myFlash_FSCommand(ByVal command, ByVal args)\ncall myFlash_DoFSCommand(comman
document.all.component.inn
document.all.vbcode.innerH
</script>
<!--div id="test1" style="position: absolute; left: 226; top: 281; width: 390; height: 234; clip:rect(0px 390px 234px 0px);"><object classid='clsid:D27CDB6E-AE
<div id="test1" style="position: absolute; left: 226; top: 281; width: 390; height: 234; clip:rect(0px 390px 234px 0px);"><SCRIPT LANGUAGE=JavaScript>var InternetExplorer = navigator.appName.indexOf(
</BODY>
</HTML>
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Very probably by this time you've already found out the solution, or don't need it anymore :) But unfortunately I only just found your question, and since information on this topic is so scarce, I thought I'd share my methods anyway.
The thing is, contrary to what the Macromedia documentation would have you believe, there really is no need for VBScript at all in coupling an FSCommand event to browser scripting. The following construct:
<SCRIPT for=.. event=FSCommand(command, args)>
does exactly the same thing, except that it can also handle Javascript, and has no problems with being softcoded through, for example, innerHTML. Of course it also saves the memory used for running the VBScript environment.
The following code illustrates this:
<HTML><BODY>
<SCRIPT language=JavaScript>
function DoFSCommand(command,args){
alert(command+','+args);
}
function createflash(){
flash_frame.innerHTML='<ob
'<param name="movie" value="fscommand.swf"></ob
'<SCRIPT event=FSCommand(command,ar
}
</SCRIPT>
<BUTTON onclick="createflash();">c
<div id=flash_frame></div>
</BODY></HTML>
fscommand.swf is simply a flash clip with a random fscommand (in a button event here).
Hope you still have use for it! I didn't do any cross-platform/browser checks yet. But it should at the very least be fine on MS IE 5.0 and up, on windows platforms.
Cheers