我在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下,错误显示为未捕获错误:在NPObject上调用错误方法。
让事情变得更有趣;当他使用他的Facebook帐户在我的机器上测试应用程序时出现此错误,并且当我使用我的Facebook帐户在HIS机器上测试应用程序时不会发生此错误。
我还能够用另外两个Facebook帐户测试该应用程序。其中一个在我的Mac下在Safari下,另一个在我朋友的妻子的PC上使用Chrome。这些测试都没有出错。
此应用的Flash目标版本至少为v11(所有经过测试的计算机/浏览器都有最新的Flash播放器),并使用swfobject 2插入页面。
我对此行为感到非常困惑。有人遇到过这样的事吗?
提前致谢!
答案 0 :(得分:0)
我们甚至尝试过的黑暗中的总镜头......
为了符合Facebook的https,我们在安全的服务器上。我们在朋友的设置下进行了检查,发现未选中https浏览设置。再次检查后,一切正常。