0

Я пытаюсь сделать приложение Facebook, которое запускает .swf ion на странице холста. Мне нужно получить идентификатор пользователя Facebook, который я пытался использовать с помощью AS3 Facebook Graph Api, но это не сработало, поэтому я пытался получить идентификатор, вызвав FB.getUserID(); и разоблачив полученный идентификатор, получив Flash фильм и вызов метода внутри него, используя класс ExternalInterface. Я пытаюсь проследить это в текстовом поле внутри swf, но он не работает, я имею в виду, что идентификатор никогда не попадает в Flash-фильм.ExternalInterface.callback не работает

Вот мой код JavaScript:

<div id="fb-root"></div> 
<script src="http://connect.facebook.net/en_US/all.js"></script> 
<script> 
var swf = null; 



     FB.init({ appId: 'APP_ID',    
      status: true, 
      cookie: true, 
      xfbml: true, 
      oauth: true}); 

    FB.Canvas.setAutoResize(false); 
    FB.Canvas.setSize({ height: 720, width: 600 }); 
    // Load the SDK Asynchronously 
    (function(d){ 
    var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;} 
    js = d.createElement('script'); js.id = id; js.async = true; 
    js.src = "//connect.facebook.net/en_US/all.js"; 
    d.getElementsByTagName('head')[0].appendChild(js); 
    }(document)); 
    var uid = ""; 

    FB.Event.subscribe('auth.statusChange', function(response) { 
      if (response.authResponse) { 
       uid = FB.getUserID(); 
       console.log('User Id = '+ uid); 
      } 
      else 
      { 
       FB.login(); 
      } 
    }); 


    // Call a flash function exposed with External Interface. 
     document.getElementById("chimpInvader").setUID(uid); 



    // Custom Facebook Calls. 
    // Call getAccessToken() from flash using External Interface, 
    function getAccessToken(){ 
     FB.login(function(response) 
     { 
      if (response.authResponse) 
      { 
      var access_token = FB.getAuthResponse()['accessToken']; 
      //Log your access token so you can be sure the javascript is worjking,. 
      console.log('Access Token = '+ access_token); 

       swf = document.getElementById("chimpInvader"); 

       // Call a flash function exposed with External Interface. 
       swf.setAccessToken(access_token); 
      } 
      else 
      {   
      console.log('User cancelled login or did not fully authorize.'); 

      } 
    }, {scope: ''}); 


    } 
    var movieName = "chimpInvader"; 
    // Get Swf 
    function getSwf(movieName) { 
     if (navigator.appName.indexOf("Microsoft") != -1) { 
      return window[movieName]; 
     } else { 
      return document[movieName]; 
     } 
    } 

</script> 

А вот мой AS3 код внутри .as файла, который вызывается при .swf пробеги:

package 
{ 
    import flash.display.MovieClip; 
    import flash.events.ProgressEvent; 
    import flash.display.Loader; 
    import flash.net.URLRequest; 
    import flash.events.Event; 
    import flash.external.ExternalInterface; 

    public class PreloaderMc extends MovieClip 
    { 
     public static var user_id: String = ""; 
     function PreloaderMc():void 
     { 
      var mLoader = new Loader();    
      ExternalInterface.addCallback("setUID", getFId);    
      var mRequest:URLRequest = new URLRequest ("chimpInvader.swf"); 
      mLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, oncomplete); 
      mLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,loading); 
      mLoader.load(mRequest); 
     } 
     function getFId(uid):void 
     { 
      user_id = uid.toString(); 
      txtId.text = "Method Called!"; 
      trace("Getting id"); 
     } 

     function oncomplete(e:Event) 
     { 
      addChild(e.currentTarget.content); 
     } 
     function loading(evt:ProgressEvent) 
     { 
      var porcentaje:Number = (evt.bytesLoaded/evt.bytesTotal)*100; 
      trace (porcentaje); 
      preloadertext.text = String(Math.round(porcentaje)); 
     } 
    } 
} 

Я очень признателен за любую помощь, которую я может получить в этом вопросе.

+0

Вы получили идентификатор пользователя в javascript как минимум? – Dhiraj

+0

Да, я решил, я решил проблему, передав идентификатор пользователя, как переменную flash, через swfObject, но мне действительно интересно узнать, как это сделать – j1c1m1b1

ответ

0

Ваш файл swf находится в том же домене, что и ваша холст-страница? Вы получаете доступ к файлу swf с помощью https? Если это не так, у вас может возникнуть проблема с межсайтовым скриптингом. У меня была та же проблема, что и в прошлые недели. Принял мне 1 день для решения моих проблем с скриптовыми скриптами.

+0

Спасибо за ваш ответ, мой .swf fike в том же как моя страница холста – j1c1m1b1

 Смежные вопросы

  • Нет связанных вопросов^_^