0

FacebookキャンバスにFlashアプリを設定していて、ExternalInterfaceを使用してJavaScript関数を呼び出し、最初の関数が完了したときにJavaScriptからFlash関数を呼び出しています。

Flashオブジェクトと変数:

this.dBug.text += "\ngetting user albums...\n"
var usrAlbums:Array = new Array();
var pageLimit:Number = 48;
var pageOffset:Number = 0;
this.dBug.text += "\ttotal albums before call: " + usrAlbums.length + "\n";

コールバック関数:

this.dBug.text += "\tadding getAlbumResponse callback to ExternalInterface\n";
ExternalInterface.addCallback('getAlbumResponse', getAlbumResponse);
this.dBug.text += "\tcreating getAlbumResponse callback\n";
function getAlbumResponse(rtrn):void{
    dBug.text += "\nresponding to album get...\n";
    this.dBug.text += "\t\t\tresult: " + rtrn['data'] + "\n";
    var album:Array = rtrn['data'];
    this.dBug.text += "\t\tadding objects to usrAlbums array...\n";
    for(prop in rtrn['data']){
        usrAlbums.push(new Array(album[prop], new Array()));
        this.dBug.text += "\t\t\tadded " + album[prop] + ", new Array() to usrAlbums array\n";
        ++pageOffset;
        this.dBug.text += "\t\t\t\talbumCount:  " + pageOffset + "\n";
    }
    this.dBug.text += "\tcheck for more albums\n";
    if(pageOffset == pageLimit){
        getAlbum(++pageOffset, pageLimit);
    }else{
        this.dBug.text += "\t\ttotal albums after call: " + usrAlbums.length + "\n";
    }
}

JavaScriptへのExternalInterface呼び出し関数:

function getAlbum(offset:Number, limit:Number){
    this.dBug.text += "\t\tcalling swfGetAlbum(/me/albums?offset=" + offset + "&limit=" + limit + ")...\n";
    ExternalInterface.call('swfGetAlbum', '/me/albums?offset=' + offset + '&limit=' + limit);
}

EI関数を呼び出します。

getAlbum(pageOffset, pageLimit);

ホスティングページのJavascript:

function swfGetAlbum(graph){
    console.log('swfGetAlbum(' + graph + ')');
    FB.api(graph, function(response){ console.log(response); swfGetAlbumCallback(response); });
}
var swfGetAlbumCallback = function(response){
        console.log(response);
    console.log(document.getElementById('app-root'));
            document.getElementById('app-root').getAlbumResponse(response);
}

私のMacでは、Chrome、Safari、Opera、FirefoxのFacebookアカウントですべてが正常に機能します。また、テスト用PCの同じブラウザーで動作し、さらにInternetExplorerでも動作します。

何らかの理由で、友人がFacebookアカウントを使用してアプリをテストすると、Javascriptコードがコールバックを開始し、document.getElementById('app-root')。getAlbumResponse(response);を実行しようとするとエラーが発生します。。彼は同じブラウザを使用して自分のPCでテストしており、すべて同じ結果が得られています。Chromeでは、エラーは「キャッチされないエラー:NPObjectでメソッドを呼び出すときにエラーが発生しました」と表示されます。

物事をより面白くするために; このエラーは、彼が自分のFacebookアカウントを使用してMYマシンでアプリをテストしているときに表示され、Facebookアカウントを使用してHISマシンでアプリをテストしているときは発生しません。

他の2つのFacebookアカウントでアプリをテストすることもできました。1つはSafariの下のMacにあり、もう1つはChromeを使用している友人の妻のPCにあります。これらのテストのどちらにもエラーはありませんでした。

このアプリのFlashのターゲットバージョンは少なくともv11であり(テストされたすべてのマシン/ブラウザーには最新のFlashプレーヤーが搭載されています)、swfobject2を使用してページに挿入されます。

私はこの振る舞いに完全に困惑しています。誰かがこのようなものに出くわしますか?

前もって感謝します!

4

1 に答える 1

0

私たちがこれを試した暗闇の中でのトータルショット...

Facebookのhttpsに準拠するために、私たちは安全なサーバーを使用しています。友達の設定を確認したところ、httpsブラウジングの設定がオフになっていることがわかりました。もう一度チェックすると、すべてが機能しました。

于 2013-03-11T22:35:34.537 に答える