2009-07-31 57 views
2

我有兩個使用localConnection彼此進行通信的Flash電影,將一個對象從swfA傳遞到swfB。這似乎工作正常,但偶爾會失敗。我們唯一的信息是狀態事件被激發的級別爲error,沒有其他信息。一旦連接失敗,它將繼續這樣做。Flash Player中的localConnection有時會隨機失敗嗎?

我不知道它爲什麼會發生,但它不是一個安全問題(兩部電影都在同一個域中運行),並且所有通信都包含在try..catch中。

有沒有人見過這個或任何人都可以提出一種電影之間進行通信的替代方法?我嘗試過使用ExternalInterface,但發送的更新數量太慢。

+0

他們確實失敗。正如肖恩在下面提到的,這通常是因爲名稱衝突......但也有其他一些情況。他們'工作',但他們當然不可靠。 :( – Gabriel 2009-08-06 09:20:15

回答

0

LocalConnection是瘋了。它通過您的計算機並與全球的剪輯進行通信。這意味着他們甚至不必在同一頁面上。例如,如果您運行的是空中應用程序,則可以與基於瀏覽器的應用程序進行通信。

只要記住,ID是全球性的,如果它們發生衝突就會出錯。當我打開同一個swf兩次時(因爲它在同一個id上偵聽),我發生過這種情況。即使他們在單獨的頁面上,也會發生這種情況

另一個選擇是讓你的swfs輪詢服務器並通過數據庫進行通信。不知道這是否有幫助。我儘量避免LocalConnection :)

1

我們似乎已經解決了這個問題,但並不完全確定爲什麼(我們可能只是大大減少了失敗次數)。我們已經實現了以下內容:

  • 的一切移動到externalInterface減少localConnections的數,其中速度是不是每次刷新頁面附加一個時間戳生成每個電影的一個全球唯一的ID的問題
  • (而不是重複使用相同的ID)。這似乎大大減少了失敗的發生(儘管它們仍然發生)
  • 向LocalConnection id添加了'_'(請參閱文檔以瞭解原因)。不確定這是否有幫助,但似乎是一個很好的做法。
  • 每次發生故障時強制重新連接。再一次,實現一個好東西來提高健壯性,但由於現在沒有發生故障,因此不負責直接修復該錯誤。

所以沒有確切的解決方法,只是看起來一起解決了這個問題。

0

我剛剛有同樣的問題。我的解決方案是設置一個計時器,嘗試重新連接到連接,直到找到它。非常簡單的定時器,如果連接成功,該功能會設置e.target.stop()