2012-10-22 74 views
0

我想調用javascript方法flex,將對象從flex傳遞到javascript

這樣我就可以檢索到包含flex中的數據的javascript對象。

現在我試圖像

var result:Object = new Object() 
var keyset:Array = data.getKeySet(); 

for (var i:int = 0 ; i < keyset.length ; i++) { 
    result[keyset[i]] = data.get(keyset[i]); 
} 

return result; 

,但它不工作。我怎樣才能做到這一點?

p.s.我知道這是一個基本問題,但即使我搜索了一個小時,也找不到任何東西。所以請幫忙!

回答

1

我相信你不能直接從JS調用AS3中的方法(反之亦然)。應該有一個接口,但可以調用另一個接口。如果我沒有記錯,你應該使用ExternalInterface API

另外,您也無法將Flex對象傳遞給JS(反之亦然)。嘗試構建一個可序列化爲JSON的通用對象,並使用該序列化數據將數據傳遞給對方。接收方可以解析它以使用數據。在this example中,代碼將一個字符串從JS傳遞給AS3。

在你的情況下,Flex功能將:

  • 構建對象
  • 數據東東吧
  • 連載成JSON字符串
  • 返回字符串給調用者

然後當JS調用函數:

  • JS接收串
  • 使用JSON.parse()到JSON字符串重建爲一個JS對象
  • 使用對象
2

要在頁面上的Flash/Flex和JS之間進行通信,則使用ExternalInterface類。您不能直接傳遞對象,但可以將對象轉換爲可串行化/字符串。這裏是你會怎麼稱呼一個叫「myFunc的」功能並進行設置兩個參數,一個字符串和一個數字:

ExternalInterface.call('myFunc',1,'aString'); 

函數名後,必須始終是一個字符串,有一個休息......參數。簡而言之,這意味着你可以發送任意數量的參數給函數,用逗號分隔它們(我們在這裏做兩個)。

如果您在過去的任何時候使用了AS2,您可能知道'eval'函數,它從JS繼承而來並由JS使用 - 它分析一個字符串並嘗試將其解析爲JavaScript,這個你可以從字面上發送Javascript代碼,而不是一個FUNC /參數的個數:

ExternalInterface.call('alert("Hello!")'); 

如果你想雙向通信,使用對ExternalInterface.addCallback函數註冊從JS調用的函數。

在錯誤的情況下這樣做的時候,你可能需要調整您的嵌入代碼:「在對包含HTML頁面的SWF文件的對象標籤,設置以下參數:

PARAM NAME =」的allowScriptAccess 「value =」always「

+0

+1注意allowScriptAccess –