如何通过一个引用的JS函数作为参数传递给一个ExternalInterface的电话吗? [英] How to pass a reference to a JS function as an argument to an ExternalInterface call?

查看:152
本文介绍了如何通过一个引用的JS函数作为参数传递给一个ExternalInterface的电话吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

摘要
我希望能够使用ExternalInterface的从Flex应用程序调用的JavaScript函数,并传递一个引用到不同的JavaScript函数作为参数。<​​/ P>

基本示例
鉴于以下JavaScript:

 函数foo(回调)
{
    // ...做一些东西
    回电话();
}

函数bar()
{
    //做一些东西一个电话后应该发生到foo的
}
 

我想用ExternalInterface的从我的Flex应用程序调用,并通过引用作为回调。

为什么
说真的,是不是我的函数(,而是 FB.Connect.showBook​​markDialog ),这是由于限制Facebook的IFRAME应用程序只能算得上点击一个按钮。我的按钮,设计的原因,是在Flex应用程序。幸运的是,可以调用 ExternalInterface.call(FB.Connect.showBook​​markDialog,回调)显示书签对话框。但是, FB.Connect.showBook​​markDialog 要求JS回调的话,我想收到的回调(我做的),我需要传递一个引用JS功能单个参数。

实证

MXML:

 &LT; MX:按钮点击=showBook​​markDialog(); /&GT;
 

动作:

 函数showBook​​markDialog():无效
{
    ExternalInterface.registerCallback(
        onBookmarkDialogClosed
        onBookmarkDialogClosed
    );
    ExternalInterface.call(
        FB.Connect.showBook​​markDialog
        / *裁判JS功能onBookmarkDialogClosed? * /
    );
}

功能onBookmarkDialogClosed(成功:布尔):无效
{
    //甜蜜的,我们做了回
}
 

JavaScript的:

 函数onBookmarkDialogClosed()
{
    VAR成功;
    //判断是否成功的价值
    getSWF()onBookmarkDialogClosed(成功)。
}
 

失败的实验 我曾尝试...

  ExternalInterface.call(
    FB.Connect.showBook​​markDialog
    onBookmarkDialogClosed
);

ExternalInterface.call(
    FB.Connect.showBook​​markDialog
    onBookmarkDialogClosed
);

ExternalInterface.call(
    FB.Connect.showBook​​markDialog
    ()的函数:无效
    {
        ExternalInterface.call(onBookmarkDialogClosed);
    }
);

ExternalInterface.call(
    FB.Connect.showBook​​markDialog
    功能()
    {
        这种[onBookmarkDialogClosed]();
    }
);
 

值得注意的是:

  1. 在传递一个字符串作为参数的ExternalInterface的通话效果在FB的JS基本上要做`onBookmarkDialogClosed()`这,不用说,是行不通的。
  2. 在传递一个函数作为参数导致函数对象的另一面(可确定与`typeof`),但它似乎是一个空函数;即,`函数功能(){}`
解决方案

与以往一样,只有一个需要问一个问题,对于要揭晓答案......

解决方案

  ExternalInterface.call(FB.Connect.showBook​​markDialog(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:

  1. 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.
  2. 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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆