2015-09-07 21 views
0

我認爲我發現了LocalConnection通信設置的閃存錯誤,如此處所述。下面的網站是不是我的,我只是用它來表明該問題也發生在其他網站:as3當網站在2個瀏覽器窗口中打開時,LocalConnection通信停止工作

如何重現:

http://fcontheweb.com/articles/localconnection/

如果您在2打開網站瀏覽器窗口,找到在2個as3組件之間發送消息的as3示例。

單擊第一個瀏覽器窗口中的按鈕:它將與消息框進行本地通信。如果您然後按下第二個瀏覽器窗口上的按鈕,則不會發生任何事情。如果關閉第一個瀏覽器窗口,則必須在開始爲第二個窗口工作之前刷新頁面。

我認爲這是因爲兩個窗口中的as3對象的名稱空間在瀏覽器的Flash播放器插件中重疊,並且通信通道鏈接正在被覆蓋。

您可以通過再次打開2個窗口來輕鬆驗證我的假設,但現在先按下LAST窗口中的按鈕。這個窗口中沒有任何事情會發生,但消息會顯示在第一個窗口中!不知何故,最後一頁的接收器不會被創建,因爲該名稱的接收器已經存在於Flash插件的對象存儲中。

你能證實這一點,更有趣的是,有沒有人有這方面的解決方法?是否有可能檢測一個swf的實例在本地運行並將其用於連接名稱?

編輯:觀察到的行爲不是錯誤,但預期的行爲。然而,我的問題仍然存在:如何讓頁面在同一個瀏覽器窗口中使用LocalConnection獨立於同一系統上不同瀏覽器窗口中的相同頁面進行通信。

回答

2

在你的問題中提到的行爲是一個正常的行爲,它不是一個錯誤。

要理解爲什麼,請將您打開的2個窗口視爲2個窗口,每個窗口包含一個客戶端和一個服務器,並且您的兩個服務器將偵聽相同的端口PORT,並且您的兩個客戶端都將連接到您的端口本地機器。因此,當您啓動第一個窗口時,服務器將開始監聽PORT上來自客戶端的連接,由於端口PORT已被佔用,因此第二臺服務器將無法啓動,因此第一臺服務器將接收所有客戶端連接。

有關檢測swf的本地運行實例的第二個問題,您可以簡單地使用SharedObject

希望能有所幫助。

+0

好的,這是設計。如何使用SharedObject來計算** live **實例的數量(不僅僅是打開的總數)並不是很明顯。我可以爲同一瀏覽器中的所有頁面生成並傳遞GUID(例如:http://snipplr.com/view/45247/as3-globally-unique-identifier-guid/),以用作LocalConnection名稱,如果那是你的建議? – StarShine

+0

@StarShine我不知道你想要用LocalConnection來做什麼,但是你可以使用'SharedObject'來計算你的swf實例,並且確保當它們中的任何一個創建了一個唯一的新連接時: 'swf1:con1,swf2:con2,...,swf_n:con_n' ... – akmozo

+0

嗯,那不是我真正需要的。 (我認爲)相反,我希望swf1在瀏覽器窗口1中與swf2交談,而我希望在瀏覽器窗口2中顯示相同內容。目前,窗​​口1的swf1與窗口2中的swf2交互(跨窗口消息傳遞)。對不起,如果這聽起來有點複雜:) – StarShine

相關問題