摘要
我希望能够使用ExternalInterface从Flex应用程序调用JavaScript函数,并将对不同JavaScript函数的引用作为参数传递。
基础示例
给出以下JavaScript:
function foo(callback)
{
// ... do some stuff
callback();
}
function bar()
{
// do some stuff that should happen after a call to foo
}
我想使用ExternalInterface从我的flex应用中调用foo
,并将引用传递给bar
作为回调。
为什么
实际上,foo
不是我的功能(而是FB.Connect.showBookmarkDialog
),由于Facebook iframe应用的限制只能通过点击按钮来调用。出于设计原因,我的按钮位于Flex应用程序中。幸运的是,可以调用ExternalInterface.call("FB.Connect.showBookmarkDialog", callback)
来显示书签对话框。但是,FB.Connect.showBookmarkDialog
需要一个JS回调,所以,如果我想接收回调(我这样做),我需要将对JS函数的引用作为单个参数传递。
真实示例
MXML:
<mx:Button click="showBookmarkDialog();" />
的ActionScript:
function showBookmarkDialog() : void
{
ExternalInterface.registerCallback(
"onBookmarkDialogClosed",
onBookmarkDialogClosed
);
ExternalInterface.call(
"FB.Connect.showBookmarkDialog",
/* ref to JS function onBookmarkDialogClosed ? */
);
}
function onBookmarkDialogClosed(success:Boolean) : void
{
// sweet, we made it back
}
JavaScript的:
function onBookmarkDialogClosed()
{
var success;
// determine value of success
getSWF().onBookmarkDialogClosed(success);
}
实验失败 我试过......
ExternalInterface.call(
"FB.Connect.showBookmarkDialog",
"onBookmarkDialogClosed"
);
ExternalInterface.call(
"FB.Connect.showBookmarkDialog",
onBookmarkDialogClosed
);
ExternalInterface.call(
"FB.Connect.showBookmarkDialog",
function() : void
{
ExternalInterface.call("onBookmarkDialogClosed");
}
);
ExternalInterface.call(
"FB.Connect.showBookmarkDialog",
function()
{
this["onBookmarkDialogClosed"]();
}
);
值得注意的是:
答案 0 :(得分:1)
与往常一样,人们只需要问一个问题就可以揭示答案......
的解决方案的
ExternalInterface.call("FB.Connect.showBookmarkDialog(onBookmarkDialogClosed)");