I wrote some code to do something similar in ActionScript 2 that used LoadVars. This class has been removed in ActionScript 3.
This is the ActionScript 3 code I came up with. It uses ExternalInterface to execute a bit of javascript that will pull the cookies directly into flash. It alters the cookie string to make it look like a URL and runs it through URLVariables.
package {
import flash.display.Sprite;
import flash.external.ExternalInterface;
import flash.net.URLVariables;
public class BrowserCookies extends Sprite
{
//this will parse the cookie data
private var _urlVariables:URLVariables;
/**
* Return all the cookie values in one object
* @return URLVariables
*
*/
public function get urlVariables() : URLVariables {
return _urlVariables;
}
/**
* Return one cookie value
* @param value String
* @return String
*
*/
public function getCookieValue(value:String) : String {
var returnValue:String = "";
if(_urlVariables && _urlVariables[value]) {
returnValue = _urlVariables[value];
}
return returnValue;
}
/**
* This will connect to the browser and pull cookies into flash
*/
public function BrowserCookies() : void{
//this will hold the data returned from javascript
var browserCookieString:String;
//pull the data from javascript
browserCookieString = ExternalInterface.call("function(){return document.cookie}");
//replace ; with & to make it look like a url
browserCookieString = browserCookieString.replace(/;\s/g, "&");
//parse the cookie string into variables. you can now access cookie variables as properties of this object
if(browserCookieString) {
_urlVariables = new URLVariables(browserCookieString);
}
}
}
}
Now you can access any cookie property inside flash. Here is a quick example of how to use the class. Assume BrowserCookies.as exists in the same folder as the example class.
package
{
import flash.display.Sprite;
import flash.text.TextField;
public class Index extends Sprite{
public function Index(){
//this will pull all the cookies out of the browser
var urlVars:BrowserCookies = new BrowserCookies;
var textField:TextField = new TextField;
textField.width = 200;
textField.height = 200;
textField.text = urlVars.getCookieValue("today");
addChild(textField);
}
}
}
I've uploaded a Flex Projext Export version of this example available here. Feel free to contact me if you have any questions.
9 comments:
If you found this page useful, or you have any feedback, please leave a comment.