Solved

FlashVars and Actionscript 3.0

Posted on 2009-04-02
7
643 Views
Last Modified: 2013-11-12
I have the below actionscript, what I am trying to do is dynamically pass the name of the xml file using flashvars. For some reason I am getting the  Error #2044: Unhandled ioError:. text=Error #2032: Stream Error. URL: file:///C:/Documents%20and%20Settings/CRobinson/Desktop/Thermometer/xml/undefined.xml
      at thermometer_fla::thermometer_1/thermometer_fla::frame1()

See the attached txt file that is embedding the variable. Also see the actionscript to see how I am attempting to access this FlashVar called myVar. Any help here would be greatly appreciated. Thanks
stop();
import caurina.transitions.Tweener;//import tween class
stage.scaleMode = StageScaleMode.NO_SCALE;//define how stage scales
stage.align = StageAlign.TOP_LEFT;
//get all the vars from the xml file
var xmlString:URLRequest = new URLRequest("xml/" + root.loaderInfo.parameters.myVar + ".xml");
var xmlLoader:URLLoader = new URLLoader(xmlString);
xmlLoader.addEventListener("complete", init);
function init(event:Event):void {
	var xDoc:XMLDocument = new XMLDocument();
	xDoc.ignoreWhite = true;
	var thermXML:XML = XML(xmlLoader.data);
	xDoc.parseXML(thermXML.toXMLString());
	//get vars
	var goalTxt:String = xDoc.firstChild.childNodes[0].firstChild.nodeValue;//goal text
	populateGoal(goalTxt);//populate the goal text
	var goalNum:Number = xDoc.firstChild.childNodes[0].attributes.goalNum;//goal number
	var currentNum:Number = xDoc.firstChild.childNodes[1].attributes.currentNum;//current number
	makeCurrent(goalNum, currentNum);
	//marks
	var marksArray:Array = new Array;
	var marksLength:Number = xDoc.firstChild.childNodes[2].childNodes.length;
	for(var i:Number = 0;i<marksLength;i++){
		var markNum:Number = xDoc.firstChild.childNodes[2].childNodes[i].attributes.markNum;
		var markNumString:String = addCommas(markNum);
		addMark(markNumString, markNum, goalNum, currentNum);
	}
}
 
//populate goal text
function populateGoal(getGoalTxt:String):void {
	goal_txt.htmlText = getGoalTxt;
}
//make progress bar
var goalHeight:Number = 170;
function makeCurrent(goalNum:Number, currentNum:Number) {
	var percDone:Number = currentNum/goalNum;
	var progressY:Number = goalHeight - (goalHeight* percDone);//determine what y should be
	Tweener.addTween(progress_mc, {y:progressY, time:3, onUpdate:reportPosition, onUpdateParams:[progressY, goalNum, currentNum]});//tween progress
	Tweener.addTween(mask_mc, {y:progressY, time:3});//tween mask
}
//position during tween
function reportPosition(progressY:Number, goalNum:Number, currentNum:Number):void {
	var currentProgressY:Number = progress_mc.y;
	var percentDone:Number = 1 - (currentProgressY/goalHeight);
	var currentValue:Number = Math.floor(percentDone* goalNum);
	if (currentValue > currentNum) {
		currentValue = currentNum;//if the current value is more than what is should be...
	}
	progress_mc.progress_txt.htmlText = "$" + addCommas(currentValue);
}
//format number with commas
function addCommas(getDollarAmount:Number):String {
	var amountArray:Array = String(getDollarAmount).split();//split the string into an array
	var dollarArray:Array = new Array();
	var startNum:Number;
	var endNum:Number = amountArray[0].length;//length of the number
	while (endNum > 0) {
		startNum = Math.max(endNum - 3, 0);
		dollarArray.unshift(amountArray[0].slice(startNum, endNum));
		endNum = startNum;
	}
	amountArray[0] = dollarArray.join(",");//join all the nodes of the dollar array together
	return (amountArray[0]);//return the number with the ,s
}
//add marks
function addMark(markString:String, markNum:Number, goalNum:Number, currentNum:Number){
	var mark_mc:mark = new mark();
	mark_mc.x = 65;
	var percDone:Number = markNum/goalNum;
	var markY:Number = goalHeight - (goalHeight* percDone);//determine what y should be
	mark_mc.y = markY;
	mark_mc.mark_txt.text = "$" + markString;
	this.addChild(mark_mc); 
}

Open in new window

thermometer.txt
0
Comment
Question by:E-Risk
  • 4
  • 3
7 Comments
 
LVL 9

Expert Comment

by:asaivan
ID: 24054391
I'm not seeing this var listed in the Javascript part of your embed code.  It is in the <noscript> block, but not in the <script> block.
There should be 'myvar', '10868'
0
 
LVL 2

Author Comment

by:E-Risk
ID: 24054544
I added the code below same error.
<script language="javascript">
	if (AC_FL_RunContent == 0) {
		alert("This page requires AC_RunActiveContent.js.");
	} else {
		AC_FL_RunContent(
			'codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0',
			'width', '590',
			'height', '300',
			'src', 'thermometer',
			'quality', 'high',
			'pluginspage', 'http://www.macromedia.com/go/getflashplayer',
			'align', 'middle',
			'play', 'true',
			'loop', 'true',
			'scale', 'showall',
			'wmode', 'window',
			'devicefont', 'false',
			'id', 'thermometer',
			'bgcolor', '#ffffff',
			'name', 'thermometer',
			'menu', 'true',
			'allowFullScreen', 'false',
			'allowScriptAccess','sameDomain',
			'movie', 'thermometer',
			'myVar', '10868',
			'salign', ''
			); //end AC code
	}
</script>
<noscript>
	<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="590" height="300" id="thermometer" align="middle">
	<param name="allowScriptAccess" value="sameDomain" />
	<param name="allowFullScreen" value="false" />
	<param name="movie" value="thermometer.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" />	<embed src="thermometer.swf" quality="high" bgcolor="#ffffff" width="590" height="300" name="thermometer" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" myVar="10868"/>
	</object>
</noscript>

Open in new window

0
 
LVL 9

Expert Comment

by:asaivan
ID: 24054586
My fault, you actually don't need that, just add the query sting to the swf name.

my.swf?myvariable=variablevalue
0
Free learning courses: Active Directory Deep Dive

Get a firm grasp on your IT environment when you learn Active Directory best practices with Veeam! Watch all, or choose any amount, of this three-part webinar series to improve your skills. From the basics to virtualization and backup, we got you covered.

 
LVL 2

Author Comment

by:E-Risk
ID: 24054735
This is what I get:Error #2044: Unhandled ioError:. text=Error #2032: Stream Error. URL: file:///C:/Documents%20and%20Settings/CRobinson/Desktop/Thermometer/xml/undefined.xml
      at thermometer_fla::thermometer_1/thermometer_fla::frame1()

Here is what I added:
<param name="movie" value="thermometer.swf?myVar=10868" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /><embed src="thermometer.swf" quality="high" bgcolor="#ffffff" width="590" height="300" name="thermometer" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" myVar="10868"/>

Here is the action script I am using to try and refernce the variable:
var xmlString:URLRequest = new URLRequest("xml/" + this.loaderInfo.parameters.myVar + ".xml");
0
 
LVL 9

Accepted Solution

by:
asaivan earned 500 total points
ID: 24054811
remove myvar references from your embed code and try this instead.  add to script block (and no script using appropriate notation).

'FlashVars','myVar=10868'
0
 
LVL 2

Author Comment

by:E-Risk
ID: 24054860
As this ?
<script language="javascript">
      if (AC_FL_RunContent == 0) {
            alert("This page requires AC_RunActiveContent.js.");
      } else {
            AC_FL_RunContent(
                  'codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0',
                  'width', '590',
                  'height', '300',
                  'src', 'thermometer',
                  'quality', 'high',
                  'pluginspage', 'http://www.macromedia.com/go/getflashplayer',
                  'align', 'middle',
                  'play', 'true',
                  'loop', 'true',
                  'scale', 'showall',
                  'wmode', 'window',
                  'devicefont', 'false',
                  'id', 'thermometer',
                  'bgcolor', '#ffffff',
                  'name', 'thermometer',
                  'menu', 'true',
                  'allowFullScreen', 'false',
                  'allowScriptAccess','sameDomain',
                  'movie', 'thermometer',
                  'FlashVars','myVal=10868'
                  'salign', ''
                  ); //end AC code
      }
</script>

<noscript>
      <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="590" height="300" id="thermometer" align="middle">
      <param name="allowScriptAccess" value="sameDomain" />
      <param name="allowFullScreen" value="false" />
      <param name="movie" value="thermometer.swf?myVar=10868" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" />      <embed src="thermometer.swf" quality="high" bgcolor="#ffffff" width="590" height="300" name="thermometer" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer"/>
      </object>
</noscript>
0
 
LVL 2

Author Comment

by:E-Risk
ID: 24054872
Awesome! Works like a charm.
I was sooo close....Thanks for the help.
0

Featured Post

Efficient way to get backups off site to Azure

This user guide provides instructions on how to deploy and configure both a StoneFly Scale Out NAS Enterprise Cloud Drive virtual machine and Veeam Cloud Connect in the Microsoft Azure Cloud.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

There are times in your Flash CS4 application when you want more than a simple pointer or a hand, and it's hard to find an ideal walk-through to tell you what to do.  I spent a few days recently learning my way around making custom cursors in Flash,…
In my long career of working as an actionscript developer, I had spent sleepless night often working hard to solve some small problems which actually took a lot of my development time; later found out the solutions to be a line or two. Here are s…
The goal of the tutorial is to teach the user how to select which audio input to use. Once you have an audio input plugged into the laptop or computer, you will go into the audio input settings and choose which audio input you want to use.
The goal of the tutorial is to teach the user what frame rate is, how to control it and what effect it has on the video.

713 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question