Actionscript中的本地串連

來源:互聯網
上載者:User
難度: 中級
軟體環境: Flash MX

在Flash MX出現之前,就像你們之中很多人所瞭解的,JavaScript方法中的FSCommand命令集是解決在並發的swf檔案之間實現互動的最好方法,這一點本站的一個教程已經提到,在別的網站上你也能得到相關的資訊。你們也知道使用FSCommand命令解決此類問題時會有很多缺陷,比如在不同的瀏覽器和不同的作業系統上所產生的不相容問題。和FSCommand命令相似,Local Connection對象允許我們在並發的swf檔案之間實現通訊互動,而不會產生不相容現象,很少出現衝突問題。

什麼時候會使用到這種互動性呢?設想有一個網站利用HTML架構結構將swf檔案的導覽列和內容分割開來(或者內容在彈出的視窗顯示)。一個很常見的問題就會出現,使用者在內容架構裡面做出的指嚮導航架構的控制操作,常常是失效的。例如,當你利用導覽列瀏覽一個網站的名為'Profile'的部分時,相對應的'Profile'按鈕會高亮顯示,它指示著你當前正在觀看的內容,然後通過在內容架構裡面的一個超級連結跳轉到名叫'Pricing'的部分,請問你怎麼使導覽列的'Profile'按鈕的高亮顯示狀態轉移到'Pricing'按鈕上,以反映這個跳轉過程呢?好,如果你很幸運的擁有了Flash MX的話,你就可以使用Local Connection對象來解決這個問題了。

下面是一個簡單的例子。你可以看見在下面有兩個獨立的swf檔案。在第一個文字框中鍵入一些字元,然後點擊'Say!'按鈕,可以看見相同的字元被傳遞給了第二個swf檔案。這個例子不是十分貼切,但是能夠說明相同的概念。

上面的swf檔案包含著一個輸入文字框,文本變數名是'speech',在"Say!"按鈕上加上如下的代碼:

on (release) {
talkingLC = new LocalConnection();
talkingLC.send("simple_lc", "comeBack", speech);
}

上面的swf檔案包含了了一個動態文字框,文本變數名是'tmp',在檔案的第一幀上寫上如下的代碼:

listeningLC = new LocalConnection();
listeningLC.comeBack = function(speech) {
tmp = speech;
};
listeningLC.connect("simple_lc");

請看下面的代碼解釋。

首先我們檢查一下接受資訊的swf檔案。開始,我們通過定義一個名叫listeningLC的Local Connection對象。正如我們希望的,我們可以給這個對象附上方法(函數)。在上面的例子中,我們建立了一個名叫comeBack的方法,很簡單它有一個參數,並且將參數傳遞給情境下面的文字框,它的名字源自於我昨晚看的電影。最後,我們使用內建的方法connect來指定另一個我們想要聯絡的swf檔案。這裡的simple_lc是在swf檔案之間的任意的串連名稱。接下來,我們將會詳細討論connect的問題。

上一頁的第一段代碼用於發送資訊,其中的第一句代碼簡單的建立了一個Local Connection對象。注意,這個發送資料的對象名稱不能和接受資訊的swf檔案中的Local Connection對象名稱相同。這個串連名稱的作用是,它告訴Flash檔案要和別的哪些swf檔案取得聯絡。在給接收資訊的swf檔案中的Local Connection對象命名的時候,也要注意上面說的問題,這是實驗成功的必備條件。第二行是關鍵,其中發送的方法接收多個參數、變數,第一個是swf檔案之間(共同的)串連名稱,如上面的例子的simple_lc;第二個,名稱是你想調用的方法名,這個方法名是在接收資訊的swf檔案中定義的,如上面例子中的comeback;剩下的參數(是一個變數)將會被傳遞給你在接收資訊的swf檔案中定義的函數。例如,在上面的子中,變數被傳遞給了接受swf檔案中的comeback函數,變數speech的值將會被顯示在接受swf中的文字框。

有時候串連會不成功,可能是代碼的問題,也可能是domain(域)發生衝突(見下面)。雖然看起來一切運作正常,但是實際上沒有見效,致使我們不能成功的進行下去,這時防禦性的程式設計可以指導我們進行檢查。Macromedia提供給我們了onStatus事件處理器,可以非常有效提供檢查功能。當發送資訊的Local Connection對象運行了send命令後,onStatus處理器將會被調用。它返回一個對象,包含著一個level(層)屬性,可以協助確定我們的命令是否成功。如果這個level屬性等於一個字串"error",說明出現了錯誤。將發送資訊的swf檔案中的代碼按照下面的例子改寫:

on (release) {
talkingLC = new LocalConnection();
talkingLC.send("simple", "comeBack", speech);
// Note in the line above the connection name is wrong
// "simple" should be "simple_lc" as before. This is intentional.
talkingLC.onStatus = function(result) {
if (result.level == "error") {
speech = "Connection failed!";
}
};
}

當你執行代碼的時候將會得到串連失敗的提示,那是因為發送資訊的swf檔案和接受資訊的swf檔案的串連名稱不相同(上面的代碼中也給出了相應的提示)。

你也應該瞭解Local Connections的其他的兩個方法。第一個是close方法,我想你應該知道他的含義吧。當不再需要Local Connection的時候,你可以關閉它。如果把接收資訊的swf檔案中的代碼改寫成下面的樣子,你知道會發生什麼事情嗎?

listeningLC = new LocalConnection();
listeningLC.comeBack = function(speech) {
tmp = speech;
this.close();
};
listeningLC.connect("simple_lc");

答案就是,如果接受資訊的swf檔案的代碼中有close方法,運行後,你可以在發送資訊的swf檔案中更改文字框的內容,點擊"Say!"按鈕後,接收資訊的swf檔案中的文字框將會顯示接收到的新的內容,但是這個內容以後將會是持久的,不能再更改了。接收資訊的Local Connection對象使用delete方法也能達到同樣的作用。

最後,需要考慮swf檔案在不同的damain的情況。Macromedia在很大程度上確保了Flash MX player的安全性,允許我們同一時間通過domain在swf檔案之間實現有選擇性的互動,特別是用到Local Connection的情況。如果你發現你的Local Connection不能奏效(就算它運轉的很好),你應該閱讀一下MX安全白皮書(PDF),特別是關於domain(域)和互動性的那一部分內容。花上5分鐘看一看,以後將會協助你解決很多頭痛的問題。如果你覺得確實需要從domain(域)衝突的痛苦問題中得到解脫,你可以使用Local Connection對象的allowDomain和domain方法來嘗試解決你的問題。在Macromedia's Local Connection檔案中對此有詳細闡述。

25分鐘的關於Local Connection的速成講座就到這裡了!感謝Macromedia和他們的產品。如果這個教程協助了你,請給我一個email告訴我一聲。歡迎提供改正意見和建議。



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。