[英]swfobject, FB.ui callback, AS3 ExternalInterface and IE not working correctly
我使用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;
}
怪异的是,如果我在页面上添加以下内容,则单击链接即可。 功能test(){var game = document.getElementById(“ game”); 警报(game.purchaseCallback); 测试
因此,事实证明问题在于可见性。 由于FB.ui会在显示FB.ui对话框时更改对象的可见性,然后在处理对话框时将其更改回原来的状态,因此Flash应用程序会丢失其ExternalInteface。
为了解决这个问题,我添加了:
<style>
#game {
visibility: visible !important;
}
</style>
我应该补充一件事。 在IE 8中,这可能无法正常工作。 我对swf的参数进行了以下更改,现在似乎可以使用所有内容。
params.wmode = "opaque";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.