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 上的相同浏览器下运行,此外还可以在 Internet Explorer 上运行。

由于某种原因,当我的朋友使用他的 Facebook 帐户测试应用程序时,当 Javascript 代码启动回调并尝试运行document.getElementById('app-root').getAlbumResponse(response);时,他收到错误消息。. 他正在使用相同的浏览器在自己的 PC 上进行测试,所有这些都产生了相同的结果。在 Chrome 下,错误读取为Uncaught Error: Error calling method on NPObject

让事情变得更有趣;当他使用他的 Facebook 帐户在我的机器上测试应用程序时会出现此错误,而当我使用我的 Facebook 帐户在他的机器上测试应用程序时不会发生此错误。

我还能够使用另外两个 Facebook 帐户测试该应用程序。其中一个在我的 Mac 上的 Safari 下,另一个在我朋友妻子的 PC 上使用 Chrome。这些测试都没有错误。

此应用程序的 Flash 目标版本至少为 v11(所有测试的机器/浏览器都有最新的 Flash 播放器),并使用 swfobject 2 插入到页面中。

我对这种行为完全感到困惑。有人遇到过这样的事情吗?

提前致谢!

4

1 回答 1

0

我们甚至尝试过在黑暗中完全拍摄......

为了符合 Facebook 的 https,我们在一个安全的服务器上。我们检查了我朋友的设置,发现https浏览设置没有被选中。再次检查后,一切正常。

于 2013-03-11T22:35:34.537 回答