如何通过一个引用的JS函数作为参数传递给一个ExternalInterface的电话吗? [英] How to pass a reference to a JS function as an argument to an ExternalInterface call?
问题描述
摘要的
我希望能够使用ExternalInterface的从Flex应用程序调用的JavaScript函数,并传递一个引用到不同的JavaScript函数作为参数。</ P>
基本示例
鉴于以下JavaScript:
函数foo(回调)
{
// ...做一些东西
回电话();
}
函数bar()
{
//做一些东西一个电话后应该发生到foo的
}
我想用ExternalInterface的从我的Flex应用程序调用富
,并通过引用栏
作为回调。
为什么
说真的,富
是不是我的函数(,而是 FB.Connect.showBookmarkDialog
),这是由于限制Facebook的IFRAME应用程序只能算得上点击一个按钮。我的按钮,设计的原因,是在Flex应用程序。幸运的是,可以调用 ExternalInterface.call(FB.Connect.showBookmarkDialog,回调)
显示书签对话框。但是, FB.Connect.showBookmarkDialog
要求JS回调的话,我想收到的回调(我做的),我需要传递一个引用JS功能单个参数。
实证
MXML:
&LT; MX:按钮点击=showBookmarkDialog(); /&GT;
动作:
函数showBookmarkDialog():无效
{
ExternalInterface.registerCallback(
onBookmarkDialogClosed
onBookmarkDialogClosed
);
ExternalInterface.call(
FB.Connect.showBookmarkDialog
/ *裁判JS功能onBookmarkDialogClosed? * /
);
}
功能onBookmarkDialogClosed(成功:布尔):无效
{
//甜蜜的,我们做了回
}
JavaScript的:
函数onBookmarkDialogClosed()
{
VAR成功;
//判断是否成功的价值
getSWF()onBookmarkDialogClosed(成功)。
}
失败的实验 我曾尝试...
ExternalInterface.call(
FB.Connect.showBookmarkDialog
onBookmarkDialogClosed
);
ExternalInterface.call(
FB.Connect.showBookmarkDialog
onBookmarkDialogClosed
);
ExternalInterface.call(
FB.Connect.showBookmarkDialog
()的函数:无效
{
ExternalInterface.call(onBookmarkDialogClosed);
}
);
ExternalInterface.call(
FB.Connect.showBookmarkDialog
功能()
{
这种[onBookmarkDialogClosed]();
}
);
值得注意的是:
- 在传递一个字符串作为参数的ExternalInterface的通话效果在FB的JS基本上要做`onBookmarkDialogClosed()`这,不用说,是行不通的。
- 在传递一个函数作为参数导致函数对象的另一面(可确定与`typeof`),但它似乎是一个空函数;即,`函数功能(){}`
与以往一样,只有一个需要问一个问题,对于要揭晓答案......
解决方案
ExternalInterface.call(FB.Connect.showBookmarkDialog(onBookmarkDialogClosed));
Summary
I want to be able to call a JavaScript function from a Flex app using ExternalInterface and pass a reference to a different JavaScript function as an argument.
Base Example
Given the following JavaScript:
function foo(callback)
{
// ... do some stuff
callback();
}
function bar()
{
// do some stuff that should happen after a call to foo
}
I want to call foo
from my flex app using ExternalInterface and pass a reference to bar
as the callback.
Why
Really,foo
is not my function (but, rather, FB.Connect.showBookmarkDialog
), which due to restrictions on Facebook iframe apps can only be called on a button click. My button, for design reasons, is in the Flex app. Fortunately, it's possible to call ExternalInterface.call("FB.Connect.showBookmarkDialog", callback)
to display the bookmark dialog. But, FB.Connect.showBookmarkDialog
requires a JS callback so, should I want to receive a callback (which I do), I need to pass a reference to a JS function as the single argument.
Real Example
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);
}
Failed Experiments I have tried...
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"]();
}
);
Of note:
- Passing a string as the argument to an ExternalInterface call results in FB's JS basically trying to do `"onBookmarkDialogClosed"()` which, needless to say, will not work.
- Passing a function as the argument results in a function object on the other side (confirmable with `typeof`), but it seems to be an empty function; namely, `function Function() {}`
As always, one need only ask a question for the answer to be revealed...
Solution
ExternalInterface.call("FB.Connect.showBookmarkDialog(onBookmarkDialogClosed)");
这篇关于如何通过一个引用的JS函数作为参数传递给一个ExternalInterface的电话吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!