LocalConnection 類別可以讓您開發不需要使用 fscommand() 方法或 JavaScript 就可以相互傳送指令的 SWF 檔。LocalConnection 物件只可以讓在相同用戶端電腦上執行的 SWF 檔間彼此通訊,但這些檔案可以在不同的應用程式中執行。例如,在瀏覽器中執行的 SWF 檔與在放映檔中執行的 SWF 檔可以共享資訊,放映檔會維護本機資訊,而在瀏覽器中執行的 SWF 檔則採用遠端連線的方式與其共享資訊 (放映檔是一種 SWF 檔,其儲存格式可允許做為獨立應用程式執行,也就是說,不需要先安裝 Flash Player 就可以執行,因為它已經內嵌於可執行檔內)。
不同的 ActionScript 版本可以使用 LocalConnection 物件在不同的 SWF 檔之間進行通訊:
Flash Player 會在不同版本的 LocalConnection 物件之間,自動處理這項通訊。
使用 LocalConnection 物件最簡單的方法就是只允許位於相同網域或相同 AIR 應用程式中的 LocalConnection 物件互相通訊。這樣一來,您就不用擔心安全性問題了。然而,如果您需要讓網域之間彼此通訊,則有幾種方式可用來執行安全性措施。如需詳細資訊,請參閱
適用於 Adobe Flash Platform 的 ActionScript 3.0 參考
中關於
send()
方法的
connectionName
參數討論,以及關於
LocalConnection
類別中的
allowDomain()
和
domain
項目的討論。
您可以使用 LocalConnection 物件傳送及接收單一 SWF 檔中的資料,不過 Adobe 不建議您採用這種方式,請改用共用的物件。
有三種方式可將回呼方法加入 LocalConnection 物件:
-
讓 LocalConnection 類別成為子類別,再加入方法。
-
將
LocalConnection.client
屬性設成實作這些方法的物件。
-
建立會擴充 LocalConnection 的動態類別,再以動態方式加入方法。
第一種加入回呼方法的方式是擴充 LocalConnection 類別。您可以在自訂類別內定義這些方法,而不是以動態方式將它們加入 LocalConnection 實體。下列程式碼將示範這個做法:
package
{
import flash.net.LocalConnection;
public class CustomLocalConnection extends LocalConnection
{
public function CustomLocalConnection(connectionName:String)
{
try
{
connect(connectionName);
}
catch (error:ArgumentError)
{
// server already created/connected
}
}
public function onMethod(timeString:String):void
{
trace("onMethod called at: " + timeString);
}
}
}
如果要建立 CustomLocalConnection 類別的新實體,您可以使用下列程式碼:
var serverLC:CustomLocalConnection;
serverLC = new CustomLocalConnection("serverName");
第二種加入回呼方法的方式是使用
LocalConnection.client
屬性。這種做法會先建立一個自訂類別,並將新的實體指定給
client
屬性,如下列程式碼所示:
var lc:LocalConnection = new LocalConnection();
lc.client = new CustomClient();
LocalConnection.client
屬性指出應該叫用的物件回呼方法。在上一段程式碼中,
client
屬性是設為自訂類別 CustomClient 的新實體。
client
屬性的預設值為目前的 LocalConnection 實體。當您有兩個資料處理常式是使用一組相同的方法但卻有不同的運作方式時 (例如,應用程式某個視窗中的一個按鈕會切換第二個視窗中的檢視狀態),請使用
client
屬性。
若要建立 CustomClient 類別,您可以使用下列程式碼:
package
{
public class CustomClient extends Object
{
public function onMethod(timeString:String):void
{
trace("onMethod called at: " + timeString);
}
}
}
第三種加入回呼方法的方式是建立一個動態類別,再以動態方式加入這些方法。這種方式和在舊版 ActionScript 中使用 LocalConnection 類別的方式非常類似,如下列程式碼所示:
import flash.net.LocalConnection;
dynamic class DynamicLocalConnection extends LocalConnection {}
您可以使用下列程式碼,以動態方式將回呼方法加入這個類別:
var connection:DynamicLocalConnection = new DynamicLocalConnection();
connection.onMethod = this.onMethod;
// Add your code here.
public function onMethod(timeString:String):void
{
trace("onMethod called at: " + timeString);
}
上一種加入回呼方法的做法並不是理想的處理方式,因為這種程式碼不容易移植,不建議使用。此外,使用這種建立本機連線的方法同時也會產生效能方面的問題,因為存取動態屬性的速度遠遠不及存取密封屬性的速度。
isPerUser 屬性
isPerUser
屬性已新增至 Flash Player (10.0.32) 和 AIR (1.5.2),以解決當一個以上的使用者登入 Mac 電腦時所產生的衝突。 在其他作業系統上,本機連線一律僅限個別使用者使用,因此會忽略此屬性。
isPerUser
屬性應該在新程式碼中設為
true
。但是,預設值目前為
false
以提供舊版相容性。預設值可能會在未來發行的執行階段版本中進行變更。