2010-03-26 46 views
3

摘要
我希望能夠使用ExternalInterface從Flex應用程序調用JavaScript函數,並將引用傳遞給不同的JavaScript函數作爲參數。如何將引用傳遞給JS函數作爲ExternalInterface調用的參數?

基地例
考慮下面的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"](); 
    } 
); 

值得注意的是:

  1. 傳遞一個字符串作爲參數傳遞給在FB的JS ExternalInterface調用結果基本要做`「onBookmarkDialogClosed 「()`不用說,不會奏效。
  2. 將函數作爲參數傳遞會導致另一方的函數對象(可以用`typeof`確認),但它似乎是一個空函數;即,`函數功能(){}`

回答

1

與往常一樣,只需要要求將揭曉答案的一個問題...

解決方案

ExternalInterface.call("FB.Connect.showBookmarkDialog(onBookmarkDialogClosed)"); 
相關問題