首頁 >web前端 >js教程 >javascript向flash swf檔案傳遞參數值注意細節_基礎知識

javascript向flash swf檔案傳遞參數值注意細節_基礎知識

WBOY
WBOY原創
2016-05-16 17:47:051327瀏覽
問題:如何使用javascript傳遞參數給SWF檔?
在網路上找了一個完整的教程,很有啟發性和實用性,如下是完整實現的步驟:
配置SwfObject
Swfobject2是目前檢測用戶是否安裝Flash的最佳方法。它被認為是‘行業標準',並且Adobe所有產品的新版本(Flex4,Flash CS5)都會使用SwfObject來檢測Flash Player。
先要下載,解壓縮ZIP文件,複製swfobject.js文件到你的web伺服器上,根目錄下創建名為'js'根文件夾是個不錯的想法。 (因此檔案位置應該是http://myserver.com/js/swfobject.js)。我們會在以後建立的HTML檔案中參考這個檔案的。如果你想使用ExpressInstall功能(提供使用者簡單的升級方法),你必須將expressInstall.swf複製到相同的資料夾下。
設定HTML檔
HTML檔包含兩個Javascript。一個用來抓取來自網址的參數。這是由Matt White創建的,它雖然簡單但十分有效。程式碼如下:
複製程式碼 程式碼如下:




將如上程式碼放置到你的HTML檔案的HEAD標籤中。你也需要將導入SWFObject腳本導入進來,程式碼如下:
另一個Javascript是使用SwfObject插入SWF檔。你可以將其放置在HTML檔案的任何地方。首先我們要做的是建立一個DIV標籤,在沒有安裝合適的Flash Player時提示使用者。 複製程式碼
程式碼如下:






This content requires Flash Player 9 (or a more recent version).

You need to
upgrade your Flash Player

複製代碼


代碼如下:


var params = {};
var attributes = {};
swfobject. embedSWF("/articlefiles/jsvars/jsvars.swf", "flashcontent", "550", "400", "9.0.0","", flashvars, params, attributes);

注意第二行,我們呼叫了Javascript函數'getURLParam',這個函數已經被插入到HTML檔案中。我們所傳遞的名字正是希望從網址中捕捉到的參數名稱。
複製程式碼 程式碼如下:

try {
var key:String; // This will contain the name of the parameter
var val:String; // This will contain the value of the parameter
var flashvars: Object = LoaderInfo(this.root.loaderInfo).parameters;
for (key in flashvars) {
val = String(flashvars[key]);
mytextField.text = key ": " val;
}
} catch (error:Error) {
// what to do if an error occurs
}

檔案:jsvars_test. 將檔案和HTML檔案一併上傳到伺服器上。當執行檔案時,你會看到文字方塊中的'test:'字樣。
注意:如果SWF無法顯示,你只看到了'升級Flash Player'字樣,表示伺服器上缺少某些東西。確保你已經將SwfObject檔(swfobject.js)上傳到了http://myserver.com/js/swfobject.js。同時確保HTML檔案中的SwfObject檔案和SWF檔案路徑正確。如果仍然有問題,請查看範例的來源檔案及路徑。
接下來,試著像這樣加入test參數http://www.flashmagazine.com/articlefiles/jsvars/jsvars_test.html?test=something.如果一切正常,你將會看到'test:something',表示你已經成功的將參數傳遞到Flash檔案中。
更進一步
你同樣可以設定來自SWF檔的參數。在這個例子中http://www.flashmagazine.com/articlefiles/jsvars/jsvars.html?test=something&id=someID我們同樣實作了發送參數。
FLA檔案包含兩個分別命名為'variablesReceived'和'variablesToSend'的文字方塊,以及一個用來傳送新參數的按鈕。這個例子的HTMl檔案被設定接收'test'和'id'兩個參數。首先我們為第一個文字方塊加入一些說明文字:
variablesReceived.text ="Variables passed in:" " ";接下來該接收變數了:

複製程式碼 程式碼如下:
try {
var key:String;
var val:String;
var flashvars:String;
var val:String;
var flashvars:String; = LoaderInfo(this.root.loaderInfo).parameters;
for (key in flashvars) {
val = String(flashvars[key]);
variablesReceived.appendText("t" key ": " val " ");
}
} catch (error:Error) {
variablesReceived.appendText(error.toString());
}


這將會在在第一個文字方塊中列舉出所有的flashvars。我們在這個檔案中使用到的另一個主要函數是發送變數函數: 程式碼如下:


// Sending parameters
function sendVariables(e:MouseEvent):void {
// First we grab the URL of the HTML document and split it into an array
ExternalInterface.call("window.location.href.toString");
// split the string at the questionmark
var splitUrl:Array = htmlUrl.split("?");
// use only the first part (ditch existing parameters)
var trimmedUrl:String = splitUrl[0];
// get the parameters we want to append to the URL
var parameters:String = variablesToString = v.textable; >// combine url and parameters with a new questionmark
var requester:URLRequest = new URLRequest(trimmedUrl "?" parameters);
// reload the page
navigateToURL(requester, '_URL(requester); 🎜>}


這裡我們使用了一個小技巧,透過使用'ExternalInterface.call'來擷取SWF檔案插入的HTML文字的網址。 Flash檔案只知道要指向自身的網址,這個技巧突破了這個限制。 ExternalInterface在SwfObject預設情況下是被打開的,但你可以手動關閉它。

我們不需要目前網址中的參數(也就是'…?test=something&id=5′)。因此我們只保留了問號之前的部分並將其儲存在'trimmedUrl'變數中以備將來之用。我們捕獲'variablesToSend'文字方塊中的參數,並將其傳遞到URLRequest中。透過將request傳遞給'navigateToURL',瀏覽器會重新載入HTML頁面並在'variablesReceived'文字方塊中顯示最近提交的值對。

注意:你不能在Flash中測試它。需要將檔案上傳到伺服器上,因為FlashVars和ExternalInterface都需要SWF被插入到瀏覽器中。

最後我們必須使用addEventListener為發送按鈕設定呼叫'sendVariables'方法。
sendButton.addEventListener(MouseEvent.CLICK,sendVariables);現在你已經知道如何使用Javascript互相傳遞參數了。讓我們用我們的所學做一些有用的事情。

建立記錄狀態的導航
結束之前,讓我們建立一個小型選單系統,這個系統可以高亮顯示當前的點擊按鈕,你可以下載已完成檔案或運行案例,讓我們來看看程式碼:
先停止SWF的時間軸播放,為滑鼠點擊設定事件監聽器。
stop();
// setup our 5 buttons
item1.addEventListener(MouseEvent.CLICK, gotoURL);
item2.addemListener(MouseEvent.CLICK, gotoURL) item4.addEventListener(MouseEvent.CLICK, gotoURL);
item5.addEventListener(MouseEvent.CLICK, gotoURL);當仍然一個按鈕被點擊,他們都會執行'gotoURL'函數'gotoURL'函數'gotoURL'函數'gotoURL'函數' 。接下來,我們擷取來自網址的參數:

複製程式碼 程式碼如下:
/ grab variables
try {
var key:String;
var val:String;
var flashvars:Object = LoaderInfo(this.root.loaderInfo).parameters;
for (key in flashvars ) {
val = String(flashvars[key]);
if(key == "item"){ // If the parameter is called 'item'...
if(val.substr( 0,4) == "item"){ // ... and the name of the button starts with the characters 'item'...
// ... we can extract the number-part of the item -name and go to the correct frame
var frameToGoTo:Number = Number( val.substr(4,1) );
gotoAndStop( frameToGoTo 1 );
}
}
}
}
} catch (error:Error) {
// what to do if an error occurs
}

正如你所看到的,這和之前的做法相似。但這次我們傳遞的參數名字是'item'。這個參數是我們點擊的按鈕的名字。
接下來是gotoURL函數。
複製程式碼 程式碼如下:

// Get the new page


// Get the new page


// Get the new page
function gURoto e:MouseEvent):void {
// First we grab the URL of the HTML document and split it into an array
var htmlUrl:String = ExternalInterface.call("window.location.href.toString");
// split the string at the questionmark
var splitUrl:Array = htmlUrl.split("?");
// use only the first part (ditch existing parameters)
varString trimmedUrl: = splitUrl[0];
// get the name of the button clicked and set it as a parameter
var parameters:String = "item=" e.currentTarget.name;
// combine url and parameters with a new questionmark
var requester:URLRequest = new URLRequest(trimmedUrl "?" parameters);
// reload the page
navigateToURL(requester, '_self');

我們透過聯合'item='字元以及點擊的按鈕名字來建立自己的參數。然後將網址以及參數傳遞到navigateToURL方法中重新載入帶有新參數的HTML頁面。 事件是如何運作的:當某些東西被點擊時我們使用addEventListener()方法監聽點擊事件,事件包含被點擊的物件的參考。 'currentTarget'屬性會引用被點擊的物件(e.currentTarget),這樣一來我們就可以使用e.currentTarget.name來獲得其名字。 要成為一個完整的選單系統,你還需要讓載入新的網址,而不是像範例中使用相同的網址。你現在應該知道最基本的知識。它同時可以以多種方式運作。可以將網址當做變數儲存在SWF中,從一個XML檔案加載,或更多其它的方式。因此我把這些交給你。如果你使用本教程創建了解決方案,請在評論中張貼網址,以便其他學習者可以看到它.
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn