2012-07-09 28 views
3

在ActionScript中,您有兩個選項可與主機通信。 (在我的情況下使用AxInterop.ShockwaveFlashObjects.dll主辦Flash影片.net應用程序)ActionScript:fscommand vs ExternalInterface

fscommand(String, ...); 

ExternalInterface.call(String, ...); 

什麼是兩者之間的主要區別?

難道fscommand在主機端稍微延遲了嗎? (即它沒有被阻擋,因此可能與ExternalInterface調用混淆?)

回答

3

ExternalInterface是直接替換fscommand,這是Flash和容器應用程序之間通信的舊方法(前Flash播放器8)(請參閱Adobe documentation)。

從文檔再次,是ExternalInterface超過fscommand的優點如下:

  • 可以使用任何JavaScript函數,不僅如此,你可以 與fscommand()函數使用的功能。
  • 您可以傳遞任意數量的參數,並帶有任何名稱;你不是 僅限於傳遞一個命令和一個字符串參數。這使得外部API比fscommand()具有更大的靈活性 。
  • 您可以傳遞各種數據類型(如布爾值,數字和 字符串);你不再侷限於字符串參數。
  • 您可以收到呼叫的值,該值立即返回到 到ActionScript(作爲您所做的呼叫的返回值)。

如果您的目標是Flash Player 8或更高版本,建議您使用ExternalInterface

1

一般來說,我會建議使用fscommand的ExternalInterface。我認爲fscommand或多或少被棄用。

這就是說,你提到fscommand是非阻塞的可能是正確的,因爲ExternalInterface.call()是同步的,所以能夠從被調用的外部函數中返回一個值。我想可能會出現情況,邊緣情況,這可能會說fscommand,但你可能不得不測試它。

同樣,我會推薦ExternalInterface,它有許多fscommand沒有的功能,比如保留ActionScript和典型外部環境(網頁中的JavaScript)之間的對象的數據類型和自動序列化/反序列化 - 而fscommand只發送字符串。在.NET應用程序中使用ExternalInterface,我可能必須解析XML-RPC(由ExternalInterface內部使用),我相信,但我不確定。