JavaScript調用swf中函數

來源:互聯網
上載者:User

The ExternalInterface API
        之前我們使用flash調用javascript函數,一般使用這樣的方法:
代碼:
getURL(“javascript:alert(‘hello zhang-chao.com’);”); //注意字串 雙引號 裡面加單引號
但是使用這種方法從flash調用javascript函數仍存在許多困難。特別是在處理多個javascript函數調用問題上。ExternalInterface API可以與javascript實現無縫調用,並且它的能力達到可以在flash時間軸使用。
在我們正式進入它的使用方法之前,我們需要確保在flash時間上可用,就要匯入它的類向這樣:
代碼:
import flash.external.*;
現在它已經允許我們做的第一件事就是可以調用javascript函數了。
Call 調用方法
call方法對於ExternalInterface對象來說是一個靜態方法,也就是說我們不需要使用ExternalInterface對象的執行個體來調用方法,我們可以直接通過對象類來調用,向這樣:
代碼:
ExternalInterface.call(functionName:String,Parameters);
這個方法有兩個參數:
·    functionName – 你想要調用的javascript函數名要以字串的形式
·    Parameters – 需要傳遞給javascript函數的參數,用逗號分開,是可選的。
這些是基本的內容,現在讓我們來看一個例子:
1.    建立一個flash文檔命名為external1.fla.
2.    建立兩個層上面的層命為AS,下面的層命名為”內容”
3.    在內容層裡面,建立一個文本域,將它設定為輸入文本域,開啟顯示邊框以方便你能看到,並給它取個名字為alert_txt,將它放在情境的左邊。
4.    仍然在內容這一層上,拖動一個按鈕組件於情境中並把它放在動態文本的右邊,設定它的label為”Alert”並給它起個名字為alert_butn.
5.    選擇上方的as層在第一幀上輸入代碼,
6.    //調用alert
7.    代碼:
import flash.external.*;
alert_butn.clickHandler = function() {
  ExternalInterface.call("alert", alert_txt.text);
}
前面部分的代碼是匯入ExternalInterface類包。然後為按鈕組件設定事件,當點擊時調用javascript函數,並將文本中輸入的文本通過externalInterface傳遞給javascript函數。
現在發布你的影片,將它和html放在伺服器上,當你在伺服器上測試時不論你在文本中輸入什麼資訊,它都將顯示在alert對話方塊中,但是如果你在本地測試,你可能就會發現當你點擊按鈕時,什麼也沒發生,這是由flashplayer的安全特性造成的。
示範檔案
上面這個範例是一個方法的例子,使用getURL方法也可以做到,然而externalinterface不只是能做到這些,除了發送資訊給javascript,它還可以通過addCallback方法接收從javascript返回的資訊。
addCallback 方法
AddCallback方法允許javascript調用flash時間上函數,基本的文法結構如下:
代碼:
ExternalInterface.addCallback(functionID:String,instance:Object,functionName:Function);
與call方法類似,它也是一個靜態方法,它有三個參數
·    functionID - 從 JavaScript 調用 ActionScript 函數時可使用的名稱。此名稱不必與 ActionScript 方法的實際名稱匹配。
·    instance - this 在該方法中被解析成的對象。此對象不一定是在其上可找到該方法的對象,您可以指定任何對象(或 null)。
·    functionName - 要從 JavaScript 調用的 ActionScript 方法。
現在讓我們開始一個例子,在這個例子中我們將使用flash調用javascript的命令來請示使用者輸入色值,當色值輸入後點擊ok,對象返回到flash並更改它的色彩,如下方法:
1.    建立一個flash文檔命名為external2.fla.
2.    與第一個例子相同,建立兩層上層命名為as.下層命名為“內容”。
3.    在內容層拖動一個按鈕組件至情境中,放在左上方,將label設為”變色”,執行個體名為change_butn.
4.    確保當前在”內容層”,繪製一個色值為0x000000的盒子,大小為100*100,當然這個沒有限制。
5.    將這個方塊轉換為movieclip.執行個體名稱命名為rec_mc.
6.    在第一幀上輸入代碼如下:
代碼:
import flash.external.*;
//改變方塊的色彩
function onChange(clr:Number) {
var temp_color:Color = new Color(rec_mc);
  temp_color.setRGB(clr);
}
//允許javascript調用onChang函數
ExternalInterface.addCallback("onChange", this, onChange);
//開啟命今視窗
change_butn.clickHandler = function() {
  ExternalInterface.call("callPrompt", "你想用什麼的色彩? (ex: 0xff0000)");
}
在代碼的前邊我們要先匯入externalinterface類包,然後我們建立一個能改變情境中方塊色彩的函數,完成後,我們調用addCallback 方法以使javascript可以調用flash的onChang函數。最後,我們針對按鈕建立事件來調用javascript命令。
你需要發布swf和html,然後用編輯軟體開啟編輯器,如果你只是從flash調用javascirpt,那麼你什麼也不用做。但是如果你需要使用javascirpt調用flash函數,還有一些小的工作需要做。
在tilte標籤的下方加入下面的javascript代碼:如下:
代碼:

開始,我們建立變數me來存放swf的引用。如果沒有它,我們不能調用flash函數。然後我們使用函數getID通過條件針對不同的瀏覽器來設定引用,之後,我們建立makeCall函數,用來調用flash函數,最後我們建立由flash來調用的函數callPromt().它將調用makeCall函數來發送資訊返回到flash.
在html的body標籤的屬性中加入onload,並設定它等於getID函數,如下:
代碼:

注意,當我們設函數給onload事件,我們傳遞給它swf的id.它可以在swf的嵌入位置找到,現在,當頁初始化完成後,函數getID將被調用,變數me就會被設定,以使javascript可以調用flash函數。
將檔案上傳到伺服器上,並進行測試,當你點擊按鈕並在提示中輸入色彩值,flash中的方塊色就會改變。

相關文章

聯繫我們

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

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

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.