Flex 2 /Flash ActionScript Error #2044

Error #2044: Unhandled skinError:. text=[IOErrorEvent type=”ioError” bubbles=false cancelable=false eventPhase=2 text=”Error #2036: Load Never Completed. URL: http://curtismorley.com/someURL/SkinUnderAllNoCaption.swf”]

Description:
Here is a combo meal deal of errors that you may get if you are using one of the basic video component skins in Flash. Flash needs to know where the file is and how it interacts with the video you are playing. The reason you will get this error is because the skin didn’t load and so Flash is trying to wrap this video skin around your video unsuccessfully which produces ActionScript Error 2044. I have always seen ActionScript 3 error 2044 coupled with ActionScript Error #2036 which says that the load of the skin never completed. I get this error because of the way wordpress handles includes.

Fix:
Put the file on the server and link to the file in the Flash Authoring Environment.

Step 1:
Convert your video into an FLV with either Flash itself or with the bundled Flash Video Encoder.

Step 2:
Import the video and go through the wizard provided. Make sure that you choose the skin you would eventually want to control your video. In the screenshot below I chose the SkinUnderAllNoCaption skin. This step is critical because it is necessary to have Flash auto generate a swf of the skin for you.

Flash Video Skin Window

Step 3:
Save your file and you check the folder that your main swf is located in. You should find another file with the name of the skin you chose. In my case the file is called ‘SkinUnderAllNoCaption.swf’.Flash video skin Autogenerated by Flash

Step 4:
FTP the ‘skin’ swf to your server.

Step 5:
Open up your Flash file and select the video. Then go to the component ‘Parameters’ palette ad 2x click the ‘skin’ option as shown in the image below.Flash Video Component Parameter Palette

Step 6:
Choose the last ‘Skin’ option called ‘Custom Skin URL’ and then enter the URL of the skin swf into this field and click ok.
Flash video Custom Skin URL

Step 7:
Don’t panic. The skin will most likely not display in the authoring environment. Hit <CTRL> + <ENTER> on your keyboard to test your movie and you will see the same lovely component that you had originally. The two files below show the file before testing your movie and after.
Flash video in Flash Authoring Environment

Flash video component preview

Step 8:
Upload your swf file to the server in the same place as your skin swf and enjoy.

Troubleshooting:
Make sure that you have a crossdomain.xml file on your server to prevent other ActionScript Errors.

You can see this in action at my post about ‘How I Made History’
Now you have a step-by-step description of how to deal with ActionScript Error #2044

As always – Happy Flashing

Flex 2/ Flash CS3 Error #3590

Flex 2/ Flash CS3 Warning / Error #3590: String used where a Boolean value was expected. The expression will be type coerced to Boolean.

or

Warning: 3590: int used where a Boolean value was expected. The expression will be type coerced to Boolean.

Description:
This is a ActionScript error is more of a warning than a true AS3 error. It will be displayed in strict mode and simply means that you have quotes around your Boolean value. Even though you may get this AS3 error it won’t prevent Flex or Flash from compiling nor ActinoScript code. It will convert it for you though. Thanks Flash for doing that for us.

AS3 Warning #3590 Fix 1:
Make sure that your boolean (true or false is not inside quotes).

Bad Code 1:

myObject.visible = “false”;

Good Code 1:

myObject.visible = false;

AS3 Warning #3590 Fix 2:
ActionScript 3 uses true and False rather than 0 and 1 for boolean. Although it does allow 0 to make it through without giving this error.

Bad Code 2:

myObject.visible = 1;

Good Code 2:

myObject.visible = true;

AS3 Warning 3590: Fix #3*Warning* This method will solve the problem temporarily and allow you to publish your code BUT it will cause you many headaches later. You will not get any warnings or error messages and this is a bad thing I Promise! If you are going to proceed down this path make sure to recheck these boxes after you are done publishing your one problem movie. With that much said, The way you do this is to turn off Strict (Verbose) Error Messages in your preferences as shown below.

Go to File >> Publish Settings >> Click on the “Flash” tab >> Next to “ActionScript version:” click the “Settings…”

AS3 Error 1118 -Implicit Coercion

AS3 Warning 3590 Fix #4 – In the example below you will see that the function “Return Type” is listed as Boolean when it needs to be listed as String.  To fix this simply change the Return Type to String or return a Boolean value “true” or “false”.

Bad Code:

function bob():Boolean
{
return “message”;
}

Good Code:

function bob():String
{
return “message”;
}

AS3 Warning 3590 is pretty easy and straight forward.

As always – Happy Flashing

Flex 2 / Flash CS3 Syntax Error #1100

Error #1100: Syntax error: XML does not have matching begin and end tags.

Description:
Here is another easy AS3 error. This Flex/Flash Error means that your XML is not valid because the end tag is simply missing or you left off the end slash (/). *Note: This AS3 error is similar to ActionScript Error #1085

Solution:
Close that end tag.

Bad Code 1

var dogXML:XML =
<dog>
<name>Fido
</dog>

or

var dogXML:XML = new XML();
dogXML =
<dog>
<name>Fido<name>
</dog>

Good Code

var dogXML:XML = new XML();
dogXML =
<dog>
<name>Fido</name>
</dog>

Related Errors:
ActionScript Error #1085

I hope this helps you solve ActionScript Error #1100

As Always Happy Flashing

Curtis J. Morley

Flex 2 / Flash CS3 Error #1085

TypeError: Error #1085: The element type “name” must be terminated by the matching end-tag “</key>”.

Description:
Here is another easy AS3 error. This Flash Error means that your XML is not valid because the end tag either does not match the opening tag or that the tag is simply missing. When it says “The element type” it is talking about the XML element. In my case this would be <name>. *Note: This AS3 error is similar to ActionScript Error #1100

Solution:
Check your spelling and make sure that you have properly nested tags.

Bad Code 1

var dogXML:XML = new XML();
dogXML =
<dog>
<name>Fido</namer>
</dog>

Bad Code 2

var dogXML:XML = new XML();
dogXML =
<dog>
<name>Fido
</dog>
</name>

Good Code

var dogXML:XML = new XML();
dogXML =
<dog>
<name>Fido</name>
</dog>

I hope this helps you solve ActionScript Error #1085

As Always Happy Flashing

Flash SEO – Google Analytics and Flash Overview

What is the most effective way to use Google Analytics and Flash?

How would you like to be able to know exactly how people are accessing your site and what they do when they are there? With Flash you can. And Google has provided the back end system free of charge for you to do it. It is called Google Analytics.

Google and Flash can show you exactly what people are doing on your site. I know how many people are mousing over the Flash piece. I know how many people are clicking a certain button. I know how many times a button is rolled-over without being clicked. I know how long the mouse is over the object. I can know every piece of data that is possible to know about what and how my users are interacting with the page, advertisement or application.

There are three key components in using Google Analytics combined with your Flash/Flex application or website. First is determining what you want tracked and how you want to use the statistics, the second is creating a Google Analytics account and setting up the proper filters etc.., the third is setting up the code in Flash and Javascript.

This is part 1 of a 5 part series on how to accomplish each of these areas.

Stay tuned for
Part 2 – “What Flash events should & shouldn’t be tracked with Google Analytics?” coming soon.

As always Happy Flashing.

AS3 Quicktip – Reversing a String With one Line of Code

ActionScipt 3 Quick Tip of the Day: How to reverse a string with one line of code.

I had the thought the other day – Is it possible to reverse a string in Flash/Flex with only one line of ActionScript Code?

I determined that it was. And here is the result of my ActionScript conjuring.

var myString:String = “ActionSript 3”;
trace(myString.split(“”).reverse().join(“”));
//Output – 3 tpirSnoitcA

Wondering what this is actually doing? Here is the explanation:

split(“”)

split() takes any string and separates it it based on the value that you pass in the parenthesis. This value is called the delimiter. For example, if I had a string “1!2!3” and split that string using an exclamation mark as the delimiter then I would have an array that includes the elements ["1","2","3"]. If I used “2” as the delimiter then the array would look like this ["1!","!3"]. Because I am not using a delimiter, just empty quotes, the string is split on each character. split() and split("") are not the same. split() without empty quotes will split on nothing and you will get an array with only one element which is the entire word.

reverse()

reverse() is a method that will take an array and and reverse the order. An array like this var myArray:Array = ["a","b","c"] will trace out as c,b,a if you use the following code trace(myArray.reverse());

join(“”);

join() will combine the elements from an array and create a string. The parameter that you pass it is called a separator and will be used to separate all the elements within the string. I use the empty string again in my code so that there will be no separation between the letters of the word. Without putting in the empty quotes you will get the result of 3, ,t,p,i,r,S,n,o,i,t,c,A with a comma separating each character including the space.

So in essence apply functions to the result of the previous function all in one line.  I take a string and split each letter into an array element, reverse that array and then join all of the separate elements back into a single word.

And that is your ActionScript 3 quicktip of the day.

As Always Happy Flashing

Flex / Flash CS3 Error #3553

Warning: 3553: Function value used where type void was expected. Possibly the parentheses () are missing after this function reference.

Description:
This is one of the best descriptions that I have seen for a Flash Error. This Flex/Flash Error is actually just a Flex/ Flash Warning. This error/warning means exactly what it says. You just forgot the parentheses () when you tried to make a method call.

Fix:
Add the Parenthesis

Bad Code:

var myTime:Timer = new Timer(1000, 3);
myTime.start;

or

var myDate:Date = new Date();
myDate.getDate;

Good Code:

var myTime:Timer = new Timer(1000, 3);
myTime.start();

or

var myDate:Date = new Date();
myDate.getDate();

As always Happy Flashing

Flash CS3 / Flex 2 AS3 Error #1116

ActionScript Error #1116: A user-defined namespace attribute can only be used at the top level of a class definition.

Description:
This ActionScript error will pop-up when a namespace is declared anywhere besides the class definition. What is a class definition you ask? It is simply the code that says names the class – something like ‘public class MyClass’

After the class is defined you are allowed to create custom(or ‘user-defined’) namespace on that level. Anywhere else in the code is not legal. This ActionScript Error is closely related to the Flash/Flex error #1114.
This AS3 error may also just be a typo. you may have typed something like ‘publi class’ rather than ‘public class’ or ‘prvate function’ rather than ‘private function’

Fix:
Either fix the misspelling in your code or place the ‘user-defined namespace’ inside the class definition. The second code example shows a namespace to separate cars and animals. Notice how the bad example nested the ‘user-defined namespace’ inside the constructor function.

Bad Code 1:

package com.cjm.somepackage
{
publi
class MyClass {
publi
function MyClass() {}
}
}

Good Code 1:

package com.cjm.somepackage
{
public
class MyClass {
public
function MyClass() {}
}
}

Bad Code 2:

package
{
public class MyClass
{
public namespace Cars;
public namespace Animals;public function MyClass() {
Animals var Jaguar:String = “A large cat chiefly of South America”;
Cars var jaguar:String = “A large car chiefly driven in North America”;
}

Cars function run():void {
trace(“At $30/mile”);
}

Animals function run():void {
trace(“On four legs”);
}
}
}

Good Code 2:

package
{
public class MyClass
{
public namespace Cars;
public namespace Animals;

Animals var Jaguar:String = “A large cat chiefly of South America”;
Cars var jaguar:String = “A large car chiefly driven in North America”;public function MyClass() {
}

Cars function run():void {
trace(“At $30/mile”);
}

Animals function run():void {
trace(“On four legs”);
}
}
}

Adobe has a great explanation of how to use namespaces as well as Collin Moock in Essential ActionScript 3 in Chapter 17

As always Happy Flashing

Flash / Flex Tutorial – How to Create a crossdomain.xml file.

Flash / Flex Tutorial – How to Create a crossdomain.xml file.

This brief tutorial will teach you how to create a crossdomain.xml file so that you can access files and information from outside domains and load files and data within your Flash / Flex apps. It is as simple as 4 easy steps.

  1. Create an xml file named crossdomain.xml. (XML can be created with Dreamweaver or just simply MS Notepad. Just make sure that you give it the ‘.xml ‘ extension on the end.)
  2. Copy and paste one of the code examples below into the XML file:
  3. Save the file.
  4. FTP / upload the file to the root directory of your website. (you should be able to see the file in a browser by typing the url www.yourwebsite.com/crossdomain.xml).

XML Code 1:
This is a typical crossdomain.xml file. Notice that I included my domain as well as my domain without the ‘www’ in front.

<?xml version=”1.0″?><!DOCTYPE cross-domain-policySYSTEM “http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd”>
<cross-domain-policy>
<allow-access-from domain=”www.curtismorley.com” />
<allow-access-from domain=”curtismorley.com” />
</cross-domain-policy>

XML Code 2:
The follwing Code will allow all domains. This effectively eliminates any security that Flash would have otherwise had. I suggest that you don’t use this example unless you enjoy security holes.

<?xml version=”1.0″?>
<!DOCTYPE cross-domain-policy SYSTEM “http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd”>
<cross-domain-policy>
<allow-access-from domain=”*” />
</cross-domain-policy>

XML Code 3:
The block of code below will explicitly disallow any and all access from any outside domain. As well, any domain that is not spelled exactly how the host domain is spelled will be blocked. This is the tighest cross domain security that you can employee.

<?xml version=”1.0″?>
<!DOCTYPE cross-domain-policy SYSTEM “http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd”>
<cross-domain-policy>
</cross-domain-policy>

XML Code 4:
The code below illustrates different uses of the ‘*’ wildcard symbol. This is the crossdomain.xml file from Amazon.com The wildcard allows for any variation before ‘.amazon.com’. Amazon does this because of the public services and APIs that it allows others to connect to.

<cross-domain-policy>
<allow-access-from domain=”*.amazon.com”/>
<allow-access-from domain=”amazon.com”/>
<allow-access-from domain=”www.amazon.com”/>
<allow-access-from domain=”pre-prod.amazon.com”/>
<allow-access-from domain=”devo.amazon.com”/>
<allow-access-from domain=”images.amazon.com”/>
<allow-access-from domain=”anon.amazon.speedera.net”/>
<allow-access-from domain=”*.amazon.ca”/>
<allow-access-from domain=”*.amazon.de”/>
<allow-access-from domain=”*.amazon.fr”/>
<allow-access-from domain=”*.amazon.jp”/>
<allow-access-from domain=”*.amazon.co.jp”/>
<allow-access-from domain=”*.amazon.uk”/>
<allow-access-from domain=”*.amazon.co.uk”/>
</cross-domain-policy>

Creating a cross domain policy file is just that easy.

And Happy Flashing.

P.S. I highly suggest that you read one or all of the following articles on cross domain policy files and the Flash Player security sandbox,

Crossdomain Article by Colin Moock

Adobe Crossdomain Technote (this one is required reading)

Flash Player 9 Security Whitepaper

Adobe LiveDocs on Flash Player Security

Flash CS3 / Flex 2 AS3 Error #2148

ActionScript Error #2148:
SecurityError: Error #2148: SWF file file:///C:/Documents and Settings/UserProfile/Desktop/flexstore/bin-release/flexstore.swf cannot access local resource myFile.swf. Only local-with-filesystem and trusted local SWF files may access local resources.

Description:
ActionScript Error #2148 can be caused by a number of reasons. If you are using Flex please keep in mind that the bin directory is a special directory that the Flash player allows SWFs ( and other files ) to load from as long as the file is stored in this directory. It will also allow a loaded swf to access network resources (a remote HTTPService call for example). If these files are placed anywhere besides the bin directory, the Flash Player prevents the file from accessing any external resources. You can allow for external access by changing the settings within the FlashPlayer or within Flex. These solutions are listed below

Fix 1 :
If you’re loading in XML or other files from a remote sever that isn’t hosting the SWF too, make sure you create a crossdomain.xml policy, and put it on the root of your webserver. If you haven’t heard about a cross domain policy or need help creating a crossdomain.xml file click the link and I will show you how to create a crossdomain.xml file. View my tutorial on How to Create a crossdomain.xml file and visit the links on the bottom of the page to learn more.

XML Code:

<?xml version=”1.0″?>
<!DOCTYPE cross-domain-policySYSTEM “http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd”>
<cross-domain-policy>
<allow-access-from domain=”www.curtismorley.com” />
<allow-access-from domain=”curtismorley.com” />
</cross-domain-policy>

Fix 2:
Within ActionScript you are now able to specify the cross domain access from within the code. I won’t get into the guts of this one but if you want to learn more view the Flash / Flex documentation or Adobe LiveDocs – Security Chapter or get Joey Lott’s book ActionScript 3 Cookbook By adding this code you will get rid of ActionScript Error #2148 If you are using https:// you will need to use allowInsecureDomain() as shown below. If you are using a local file make sure to target it correctly(i.e. c:\myFolder).

ActionScript Code:

flash.system.Security.allowDomain(“http://www.curtismorley.com”);flash.system.Security.allowInsecureDomain(“http://www.curtismorley.com”);

Fix 3:
One hack to get rid of ActionScript Error 2148 is to add these arguments to the compiler (via Properties – Flex Compiler) : -use-network=false . Beware though this will effectively change your cross-domain security.

Good Code:

-use-network=false

Fix 4:
Make sure your Global Security Settings in Flash Player allows local access to the directory your SWF/XML is running from. At the Global Security Settings in Flash Player click on Edit locations >> Add location and then either type in the new location your SWF is at (i.e. c:\myFolder) or browse for the file or folder. Shut down Flash/ Flex and all instances of the Flash Player(including browsers), and then try again. This will eliminate this ActionScript Error #2148. This solution only works for you on your computer. If you cahnge computers or change locations on the web please refer back to Fix 1.

And now you know 2 ways to fix and 2 ways to circumvent ActionScript Error #2418: Security Error

Happy Flashing