我使用swfobject加载了我的swf。在AS3内,我打电话给FB.ui来显示付费窗口。到目前为止一切正常。 付款完成后,FB.ui会调用应该回拨给AS3的回调。我得到了对swf对象的引用,但实际的方法调用失败,Object不支持属性或方法。
我一直在阅读有关此事的所有帖子,但找不到任何帮助。在我看来,getElementById没有返回正确的对象。
这只发生在IE中。 Chrome和FireFox工作正常。
var attributes = {};
attributes.id = "game";
attributes.name = "game";
attributes.align = "middle";
swfobject.embedSWF(
"game.swf", "flashContent",
"800", "600",
swfVersionStr, xiSwfUrlStr,
flashvars, params, attributes);
// JavaScript enabled so display the flashContent div in case it is not replaced with a swf object.
swfobject.createCSS("#flashContent", "display:block;text-align:left;");
.....
FB.ui(obj, function(data) {
if(!data) {
alert("There was an error processing your payment. Please try again!");
return;
}
// alert('called back order');
// IMPORTANT: You should pass the data object back to your server to validate
// the contents, before fulfilling the order.
var gameVar = document.getElementById("game");
//alert(gameVar);
//console.log(Object.prototype.toString.call(gameVar));
//alert(gameVar.purchaseCallback);
gameVar.purchaseCallback(data);
//console.log("Payment verification complete");
});
//handle errors here
//alert('some error');
return false;
}
如果我将以下内容添加到页面中,点击链接就可以了。 功能测试() { var game = document.getElementById(“game”); 警报(game.purchaseCallback); } 测试
答案 0 :(得分:1)
事实证明问题在于可见性。由于FB.ui在显示FB.ui对话框时更改了对象的可见性,然后在对话框被丢弃时将其更改回来,因此Flash应用程序将丢失它的ExternalInteface。
为了纠正这个问题,我补充说:
<style>
#game {
visibility: visible !important;
}
</style>
我应该补充一点。在IE 8中,这可能无法正常工作。我对瑞士法郎的参数进行了以下更改,现在似乎可以解决所有问题。
params.wmode = "opaque";