flash.system 套件包含一個套件層級的函數
fscommand()
,它可幫助 SWF 檔案及其容器進行通訊。函數 | 定義自 | ||
---|---|---|---|
允許 SWF 檔與 Flash Player 或用來裝載 Flash Player 的程式 (如網頁瀏覽器) 進行通訊。 | flash.system |
fscommand | () | 函數 |
public function fscommand(command:String, args:String = ""):void
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9 |
允許 SWF 檔與 Flash Player 或用來裝載 Flash Player 的程式 (如網頁瀏覽器) 進行通訊。 您也可以使用 fscommand()
函數,將訊息傳遞到 Director 或是 Visual Basic、Visual C++ 及其他可裝載 ActiveX 控制項的程式。
fscommand()
能讓 SWF 檔與網頁上的程式碼進行通訊。 然而,程式碼的存取是由網頁的 allowScriptAccess
設定所控制 (您可以在內嵌 SWF 檔的 HTML 程式碼中設定此特質—例如,在 Internet Explorer 的 PARAM
標籤或是 Netscape 的 EMBED
標籤中)。
- 當
allowScriptAccess
設為"sameDomain"
時,只允許與網頁在相同網域的 SWF 檔存取 Script。 - 當
allowScriptAccess
設為"always"
時,SWF 檔就可以與已內嵌 SWF 檔的 HTML 網頁進行通訊,即使 SWF 檔與 HTML 網頁位於不同的網域。 - 當
allowScriptAccess
設為"never"
時,SWF 檔無法與任何 HTML 網頁進行通訊。請注意,不建議使用此值,而且如果您未從自己的網域提供不受信任的 SWF 檔,此值也應該是不必要的。如果您的確需要提供不受信任的 SWF 檔,Adobe 建議您建立相異的子網域,在此放置所有不受信任的內容。
您可以拒絕 SWF 檔使用這個方法,方式是在包含 SWF 內容的 HTML 網頁中,設定 object
和 embed
標籤的 allowNetworking
參數。
如果呼叫 SWF 檔在具有檔案系統的本機或具有網路的本機安全執行程序中,而且包含的 HTML 網頁在不受信任的系統安全執行程序,則不允許 fscommand()
函數。
如需安全性詳細資訊,請參閱「Flash Player 開發人員中心」主題:安全性。
用法 1:使用 fscommand()
將訊息傳送到 Flash Player,您必須使用預先定義的命令和參數。 下表顯示您可以為 fscommand()
函數的 command
和 args
參數所指定的值。 這些值可以控制 Flash Player 所播放的 SWF 檔,包括放映檔。(「放映檔」是一種 SWF 檔,其儲存格式可執行為獨立的應用程式,也就是說,不需要 Flash Player 即可執行)。
命令 | 參數 (引數) | 目的 |
---|---|---|
quit | 無 | 關閉放映檔。 |
fullscreen | true 或 false | 指定 true 將 Flash Player 設定為全螢幕模式。 指定 false 則會將播放程式恢復為一般選單檢視。 |
allowscale | true 或 false | 指定 false 將播放程式設定為永遠以原始大小顯示 SWF 檔,而不需要縮放。 指定 true 則會強制 SWF 檔縮放至播放程式的 100%。 |
showmenu | true 或 false | 指定 true 顯示出完整的一組快捷選單項目。 指定 false 會將除了「設定」及「關於 Flash Player」以外的所有快捷選單項目變暗。 |
exec | 應用程式的路徑 | 從放映檔內執行應用程式。 |
trapallkeys | true 或 false | 指定 true 將所有按鍵事件 (包括快速鍵在內) 傳送到 Flash Player 中的 onClipEvent(keyDown/keyUp) 處理常式。 |
並非表格中列出的所有命令都能在所有應用程式中使用,
- 在網路播放程式中無法使用任何這些命令。
- 所有命令皆可在獨立放映檔應用程式中使用。
- AIR 應用程式應使用 flash.desktop.NativeApplication 類別進行類似的函數,例如以
NativeApplication.nativeApplication.exit()
取代fscommand("quit")
。 - 只有
allowscale
和exec
可在測試影片播放程式中使用。
exec
命令能夠包含的字元只有 A-Z、a-z、0-9、句點 (.) 和底線 (_)。 exec
命令只能在 fscommand 子目錄中執行。 換句話說,如果您使用 exec
命令來呼叫應用程式,則該應用程式必須位於名稱為 fscommand 的子目錄中。 exec
命令只能從 Flash 放映檔內運作。
用法 2:使用 fscommand()
傳送訊息至網頁瀏覽器中的程式碼語言 (如 JavaScript),您可在 command
和 args
參數中傳遞任意兩個參數。 這些參數可以是字串或運算式,而且會用於處理 (或「捕捉」) fscommand()
函數的 JavaScript 函數中。
在網頁瀏覽器中,fscommand()
會呼叫 JavaScript 函數 moviename_DoFScommand
,此函數位於包含 SWF 檔的網頁中。 針對 moviename
,請提供用於 EMBED
標籤之 NAME
特質或 OBJECT
標籤之 ID 屬性的 Flash 物件名稱。 如果您指定 SWF 檔 "myMovie" 的名稱,便會呼叫 JavaScript 函數 myMovie_DoFScommand
。
在包含 SWF 檔的網頁中,設定 allowScriptAccess
特質以允許或拒絕 SWF 檔存取網頁的能力,如上述。(您可以在內嵌 SWF 檔的 HTML 程式碼中設定此特質—例如,在 Internet Explorer 的 PARAM
標籤或是 Netscape 的 EMBED
標籤中)。
在瀏覽器中執行的 Flash Player 10 和更新版本中,使用這個方法以程式設計的方式開啟彈出式視窗可能不會成功。各種瀏覽器 (和瀏覽器組態設定) 可能隨時封鎖彈出式視窗,所以無法保證彈出式視窗一定會出現。但為了確保最大的成功機會,最好只在為了回應使用者動作 (例如,按下滑鼠或按下按鍵事件的事件處理常式中) 而直接執行的程式碼中使用這個方法來開啟彈出式視窗。
用法 3:fscommand()
函數可以將訊息傳送至 Director (Adobe 的 Macromedia Director)。 這些訊息會由 Lingo (Director 程式語言) 解譯為字串、事件或可執行程式碼。 如果訊息是字串或事件,必須撰寫 Lingo 程式碼,才能接收從 fscommand()
函數傳來的訊息,然後在 Director 中完成動作。 如需詳細資訊,請參閱「Director 支援中心」,網址為 www.adobe.com/support/director/。
用法 4:在 VisualBasic、Visual C++ 以及其他可裝載 ActiveX 控制項的程式中,fscommand()
函數會傳送 VB 事件,其包含的兩個字串可在環境的程式語言中處理。 如需詳細資訊,請使用關鍵字 "Flash method" 搜尋「Flash 支援中心」,網址為 www.adobe.com/tw/support/flash/。
注意:ExternalInterface 類別能提供在 JavaScript 和 ActionScript 之間 (用法 2),以及在 ActionScript 和 VisualBasic、Visual C++ 或其他可裝載 ActiveX 控制項的程式之間 (用法 4) 更好的通訊功能。您應該繼續使用 fscommand()
來傳送訊息至 Flash Player (用法 1) 和 Director (用法 3)。
參數
command:String — 傳遞給裝載應用程式的字串,可用於任何目的,或是傳遞給 Flash Player 的命令。
| |
args:String (default = " ") — 傳遞給裝載應用程式的字串,可用於任何目的,或是傳遞給 Flash Player 的值。
|
擲回值
Error — 如果不是為了回應使用者的動作 (例如滑鼠事件或按下按鍵事件) 而呼叫函數。
|
相關 API 元素
範例 ( 如何使用本範例 )
fscommand()
來指示 Flash Player 進入全螢幕模式且不允許執行縮放動作。 然後使用 draw()
將橘黃色方塊加入舞台。 在 draw()
中,加入名為 clickHandler()
的 click
事件偵聽程式,指示 Flash Player 呼叫另一個 fscommand().
做結束動作以回應 click
事件。
注意: 請在獨立的 Flash Player 中執行這個範例,不要在網頁瀏覽器中執行。
package { import flash.display.Sprite; import flash.text.TextField; import flash.system.fscommand; import flash.events.MouseEvent; public class FSCommandExample extends Sprite { private var bgColor:uint = 0xFFCC00; private var size:uint = 100; public function FSCommandExample() { fscommand("fullscreen", "true"); fscommand("allowscale", "false"); draw(); } private function clickHandler(event:MouseEvent):void { fscommand("quit"); trace("clickHandler"); } private function draw():void { var child:Sprite = new Sprite(); child.graphics.beginFill(bgColor); child.graphics.drawRect(0, 0, size, size); child.graphics.endFill(); child.buttonMode = true; addEventListener(MouseEvent.CLICK, clickHandler); var label:TextField = new TextField(); label.text = "quit"; label.selectable = false; label.mouseEnabled = false; child.addChild(label); addChild(child); } } }
Tue Jun 12 2018, 04:03 PM Z