0

캔버스 페이지를 .swf 이온으로 실행하는 Facebook 앱을 만들려고합니다. 내가 AS3 페이스 북의 그래프 API를 사용하여 할려고 페이스 북의 사용자 ID를 얻을 필요가 있지만 그것은 작동하지 않았다, 그래서 나는 FB.getUserID();를 호출하여 ID를 얻으려고 노력하고있어 얻은 ID를 플래시를 받고 폭로 movie를 호출하고 ExternalInterface 클래스를 사용하여 메소드를 호출합니다. 나는 swf 내부의 텍스트 필드에있는 것을 추적하려고 시도하지만 작동하지 않습니다. ID는 Flash 무비에 절대 도달하지 못합니다. 여기 ExternalInterface.callback not working

내 자바 스크립트 코드 :

<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> 

그리고 여기 .SWF 실행 때 호출하는이 .as 파일 안에 내 AS3 코드 :

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)); 
     } 
    } 
} 

난 정말 어떤 도움 I을 주셔서 감사합니다 이 문제에 빠질 수 있습니다.

+0

적어도 자바 스크립트에서 사용자 ID를 얻었습니까? – Dhiraj

+0

예, swfObject를 통해 플래시 변수와 같은 사용자 ID를 전달하여이 문제를 해결했지만 실제로이 작업을 수행하는 방법을 알고 싶습니다. – j1c1m1b1

답변

0

swf 파일이 캔버스 페이지와 동일한 도메인에 속 했습니까? https로 swf 파일에 액세스합니까? 그렇지 않은 경우 사이트 간 스크립팅 문제가있을 수 있습니다. 나는 몇 주 전에 같은 문제를 겪었다. 내 크로스 사이트 스크립팅 문제를 해결하기 위해 1 일을 보냈습니다.

+0

답장을 보내 주셔서 감사합니다. 내 .swf fike는 동일합니다. 내 캔버스 페이지로 도메인 – j1c1m1b1