Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 693
  • Last Modified:

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-AE6D-11cf-96B8-444553540000" 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"><param name=quality value=high><param name=bgcolor value=#FFFFFF><embed src="flash_to_javascript.swf" quality=high bgcolor=#FFFFFF  width=400 height=250 type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" name="myFlash"></embed></object></div>';
var sVBCode = '<SCRIPT LANGUAGE=VBScript\>\nSub myFlash_FSCommand(ByVal command, ByVal args)\ncall myFlash_DoFSCommand(command, args)\nend sub\n<\/SCRIPT\\>';


document.all.component.innerHTML = sFlash;
document.all.vbcode.innerHTML = 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-AE6D-11cf-96B8-444553540000' 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'><param name=quality value=high><param name=bgcolor value=#FFFFFF><embed src="flash_to_javascript.swf" quality=high bgcolor=#FFFFFF  width=400 height=250 type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" name="myFlash"></embed></object></div>
<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(command, args) {var myFlashObj = InternetExplorer ? myFlash : document.myFlash;alert("You entered: " + args);}if (navigator.appName && navigator.appName.indexOf("Microsoft") != -1 &&navigator.userAgent.indexOf("Windows") != -1 && navigator.userAgent.indexOf("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(command, args)\n');document.write('end sub\n');document.write('</SCRIPT\> \n');}</SCRIPT></div-->


</BODY>
</HTML>

0
chrishorne
Asked:
chrishorne
1 Solution
 
fragalot657Commented:
Hi Chris,

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='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id=flashplayer1 style="width: 400; height: 300">'+
     '<param name="movie" value="fscommand.swf"></object>'+
     '<SCRIPT event=FSCommand(command,args) for=flashplayer1>DoFSCommand(command,args);<\/SCRIPT>';
}
</SCRIPT>
<BUTTON onclick="createflash();">create flash instance</BUTTON>
<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
0
 
GhostModCommented:
PAQed - no points refunded (of 500)

GhostMod
Community Support Moderator
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now