title: Facebook Actionscript and IE
body: <p>I'm trying to use the Facebook Actionscript graph api but I seem to be having problems in IE (other browsers like chrome and firefox seem okay so far).</p>
  
  <p>From what i can tell, it's logging in fine and returning the user id but when i do a lookup on that user with Facebook.api(_user, handleUserRequest); I get an error.</p>
  
  <p>Is there any known problems with the Facebook Actionscript graph api that affects IE only? </p>
  
  <p>thanks
  ob</p>
  
  <p>Per request - the error is as follows:</p>
  
  <pre><code>[IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032: Stream Error. URL: https://graph.facebook.com/100002210990429?access%5Ftoken=205690086123032%7C2%2EUzvN3mFr07kPAecZ7qN1Rg%5F%5F%2E3600%2E1303135200%2E1%2D100002210990429%7Cz9L%5Fc26QKCc6cs2g5FClG%5FBsoZg"]
  </code></pre>
  
  <p>This if this url is pasted into chrome it works just fine, but IE returns 'unable to download XXXXXXXX from graph.facebook.com'</p>
  
  <p>best
  obie</p>
  
  <p>the code that I'm using is as follows:</p>
  
  <pre><code>package com.client.facebookgame.services 
  {
  
      import com.client.facebookgame.services.events.FacebookServiceEvent;
      import com.facebook.graph.data.FacebookSession;
      import com.facebook.graph.Facebook;
      import flash.events.Event;
      import flash.events.EventDispatcher;
      import flash.events.TimerEvent;
      import flash.external.ExternalInterface;
      import flash.net.URLRequestMethod;
      import flash.utils.Timer;
      import uk.co.thereceptacle.utils.Debug;
  
      /**
       * Facebook Service
       */
      public class FacebookService extends EventDispatcher
      {
          // constants
          public static const API_KEY             : String = "XXXXXX";
          public static const PERMISSIONS         : String = "read_stream,publish_stream,user_likes";
          public static const FB_REDIRECT_URL     : String = "http://apps.facebook.com/appname/";
          public static const LOGGED_IN           : String = "loggedin";
          public static const LOGGED_IN_ON_FB     : String = "loggedinonfacebook";
          public static const LOGGED_OUT          : String = "loggedout";
          public static const LOGGED_OUT_ON_FB    : String = "loggedoutonfacebook";
  
          public static const TIMEOUT_COUNT       : int = 10;
          public static const TIMER_DELAY         : int = 3 * 1000;
  
  
          // properties
          private var _user           : String;
          private var _topUrl         : String;
          private var _currentState   : String;
          private var _timer          : Timer;
          private var _timerCount     : int;
  
          public var postObject       : Object;
  
  
          // constuctor
          public function FacebookService() 
          {
              if (ExternalInterface.available) _topUrl = ExternalInterface.call("top.location.toString");
              Debug.log("facebook init", this);
              Facebook.init(API_KEY, handleLogin);
  
              startTiming();
  
              currentState = _topUrl ? LOGGED_OUT : LOGGED_OUT_ON_FB;
          }
  
  
  
  
          // methods
          public function login():void
          {
              Facebook.login(handleLogin, { perms: PERMISSIONS } );
          }
  
          public function logout():void
          {
              Facebook.logout(handleLogout);
          }
  
          public function selectUserFriendsWithAppRequestDialogue(message:String, dialogueType:String = "iframe", optionalPostObject:Object = null):void
          {
              this.postObject = optionalPostObject;
              Facebook.ui("apprequests", { message:message }, handleAppRequest, dialogueType);
          }
  
          public function checkIfUserLikesApp():void
          {
              Facebook.api(_user + "/likes", handleLikes);
          }
  
          private function startTiming():void
          {
              if (_timer) clearTimer();
              _timer = new Timer(TIMER_DELAY, TIMEOUT_COUNT);
              _timer.addEventListener(TimerEvent.TIMER, handleTimerEvents);
              _timer.addEventListener(TimerEvent.TIMER_COMPLETE, handleTimerEvents);
              _timer.start();
          }
  
          private function clearTimer():void
          {
              _timer.stop();
              _timer.removeEventListener(TimerEvent.TIMER, handleTimerEvents);
              _timer.removeEventListener(TimerEvent.TIMER_COMPLETE, handleTimerEvents);
              _timer = null;
  
              _timerCount = 0;
          }
  
          // event handlers
          private function handleLogin(success:Object, fail:Object):void
          {
              if (_timer) clearTimer();
  
              if (success)
              {
                  Debug.log(success, this);
                  _user = success.uid;
  
                  currentState = _topUrl ? LOGGED_IN : LOGGED_IN_ON_FB;
  
                  Facebook.api("/" + _user, handleGetUser);
              }
              else if (!success &amp;&amp; !_topUrl)
              {
                  ExternalInterface.call("redirect", API_KEY, PERMISSIONS, FB_REDIRECT_URL);
              }
          }
  
          private function handleGetUser(success:Object, fail:Object):void
          {
              Debug.log(success + ", " + fail, this);
              if (success) dispatchEvent(new FacebookServiceEvent(FacebookServiceEvent.GET_USER_COMPLETE, success));
              else dispatchEvent(new FacebookServiceEvent(FacebookServiceEvent.GET_USER_FAIL, fail, true));
          }
  
          private function handleAppRequest(result:Object):void
          {
              if (postObject)
              {
                  for (var i:int = 0; i &lt; result.request_ids.length; i++)
                  {
                      var requestID:String = result.request_ids[i];
                      Facebook.api("/" + requestID, handleRequestFriends); 
                  }
              }
          }
  
          private function handleRequestFriends(success:Object, fail:Object):void
          {
              if (success)
              {
                  var friendID:String = success.to.id;
                  Facebook.api("/" + friendID + "/feed", handleSubmitFeed, postObject, URLRequestMethod.POST);
              }
              else
              {
                  Debug.log(fail, this);
              }
          }
  
          private function handleLikes(success:Object, fail:Object):void
          {
              if (success)
              {
                  for (var i:int = 0; i &lt; success.length; i++)
                  {
  
                      Debug.log("compare " + success[i].id  + " with key: " + API_KEY, this);
                      if (success[i].id == API_KEY)
                      {
  
                          Debug.log("found that user liked this app!!!", this, true);
                          dispatchEvent(new FacebookServiceEvent(FacebookServiceEvent.USER_LIKES_APP, { userLikesApp:true } ));
                          return;
                      }
                  }
  
                  dispatchEvent(new FacebookServiceEvent(FacebookServiceEvent.USER_LIKES_APP, { userLikesApp:false } ));
              }
              else
              {
                  Debug.log(fail, this, true);
              }
          }
  
          private function handleLogout(obj:*):void
          {
              currentState = _topUrl ? LOGGED_OUT : LOGGED_OUT_ON_FB;
          }
  
          private function handleSubmitFeed(success:Object, fail:Object):void
          {
              if (success) dispatchEvent(new FacebookServiceEvent(FacebookServiceEvent.FEED_SUBMITTED, success));
              else dispatchEvent(new FacebookServiceEvent(FacebookServiceEvent.FEED_FAIL, fail, true));
          }
  
          private function handleTimerEvents(e:TimerEvent):void 
          {
              switch (e.type)
              {
                  case TimerEvent.TIMER :
                      _timerCount ++;
                      Debug.log("facebook init attempt " + _timerCount, this);
                      Facebook.init(API_KEY, handleLogin);
                      break;
  
                  case TimerEvent.TIMER_COMPLETE :
                      clearTimer();
                      dispatchEvent(new FacebookServiceEvent(FacebookServiceEvent.GET_USER_FAIL));
                      break;
              }
          }
  
  
  
          // accessors / mutators
          public function get currentState():String { return _currentState; }
          public function set currentState(value:String):void
          {
              if (_currentState != value)
              {
                  _currentState = value;
                  dispatchEvent(new FacebookServiceEvent(FacebookServiceEvent.STATE_UPDATE));
              }
          }
  
      }
  
  }
  </code></pre>
  
  <p>Thanks very much
  ob</p>