flash.net 套件包含可用來開啟新瀏覽器視窗、傳送 URL 請求至伺服器以及處理類別別名的套件層級函數。
函數 | 定義自 | ||
---|---|---|---|
查閱之前已經透過呼叫 registerClassAlias() 方法註冊別名的類別。 | flash.net | ||
會開啟或取代應用程式中的視窗,而該應用程式包含 Flash Player 容器 (通常是指瀏覽器)。 | flash.net | ||
當物件以 Action Message Format (AMF) 編碼時,會保留該物件的類別 (類型)。 | flash.net | ||
會將 URL 要求傳送至伺服器,但忽略任何回應。 | flash.net |
getClassByAlias | () | 函數 |
public function getClassByAlias(aliasName:String):Class
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
會查閱之前已經透過呼叫 registerClassAlias()
方法註冊別名的類別。
這個方法不會與 flash.utils.getDefinitionByName()
方法互動。
參數
aliasName:String — 要尋找的別名。
|
Class — 與指定別名相關聯的類別。 如果找不到,就會擲回例外。
|
擲回值
ReferenceError — 尚未註冊此別名。
|
相關 API 元素
navigateToURL | () | 函數 |
public function navigateToURL(request:URLRequest, window:String = null):void
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
開啟或取代應用程式中的視窗,而該應用程式包含 Flash Player 容器 (通常是指瀏覽器)。在 Adobe AIR 中,此函數會在預設的系統網頁瀏覽器中開啟 URL
安全性重要注意事項
開發人員常會將其取自外部來源 (如 FlashVars) 的 URL 值傳遞給 navigateToURL()
函數。攻擊者很可能試圖操控這些外部來源,進而從事跨網站指令碼之類的攻擊。因此,開發人員應先驗證所有的 URL,然後再傳遞這些值給 navigateToURL() 函數。
根據應用程式整體內部使用 URL 的狀況而定,合宜的 URL 資料驗證方式各有不同。最常見的資料驗證技術包括驗證 URL 配置是否得當。例如,若不慎允許 javascript: 這類 URL,可能就會形成跨網站指令碼。驗證 URL 位於您的網域內,可確保 SWF 檔不致公開而遭他人利用重新導向方式進行網路釣魚攻擊。基於強化安全性,您亦可選擇驗證 URL 的路徑,以及驗證 URL 是否遵循 RFC 原則的規範。
例如,下列程式碼示範執行資料驗證的簡易範例,拒絕了任何不是以 http:// 或 https:// 開頭的 URL,並且驗證該 URL 的網域名稱是否為您的網域。此範例未必適用於所有的網路應用程式,您應考慮視需要另對 URL 進行其他檢查。
// AS3 Regular expression pattern match for URLs that start with http:// and https:// plus your domain name. function checkProtocol (flashVarURL:String):Boolean { // Get the domain name for the SWF if it is not known at compile time. // If the domain is known at compile time, then the following two lines can be replaced with a hard coded string. var my_lc:LocalConnection = new LocalConnection(); var domainName:String = my_lc.domain; // Build the RegEx to test the URL. // This RegEx assumes that there is at least one "/" after the // domain. http://www.mysite.com will not match. var pattern:RegExp = new RegExp("^http[s]?\:\\/\\/([^\\/]+)\\/"); var result:Object = pattern.exec(flashVarURL); if (result == null || result[1] != domainName || flashVarURL.length >= 4096) { return (false); } return (true); }
若為瀏覽器中執行的「本機」內容,則 SWF 檔和包含網頁 (如果有) 必須是位於「本機信任」安全執行程序,才允許呼叫 navigateToURL()
方法透過第一個參數傳遞 URLRequest
物件來指定 "javascript:"
虛擬通訊協定。有些瀏覽器不支援 javascript 通訊協定與 navigateToURL()
方法搭配使用。請考慮改用 ExternalInterface
API 的 call()
方法,以便在包含的 HTML 頁面中叫用 JavaScript 方法。
在 Flash Player 以及 Adobe AIR 的非應用程式安全執行程序中,您無法連線到常用的保留連接埠。完整的封鎖連接埠清單,請參閱在「ActionScript 3.0 開發人員指南」中的「限制網路 API」。
在瀏覽器中執行的 Flash Player 10 和更新版本中,使用這個方法以程式設計的方式開啟彈出式視窗可能不會成功。各種瀏覽器 (和瀏覽器組態設定) 可能隨時封鎖彈出式視窗,所以無法保證彈出式視窗一定會出現。但為了確保最大的成功機會,最好只在為了回應使用者動作 (例如,按下滑鼠或按下按鍵事件的事件處理常式中) 而直接執行的程式碼中使用這個方法來開啟彈出式視窗。
在 Flash Player 10 和更新版本中,如果您使用包含上載 (由 POST 主體中 "content-disposition" 檔頭的 "filename" 參數指示) 的多部分 Content-Type (例如 "multipart/form-data"),POST 作業會受限於上載所套用的安全性規則:
- 必須執行 POST 作業,以回應使用者啟動的動作 (例如按下滑鼠或按下按鍵)。
- 如果 POST 作業會跨越網域 (POST 目標與傳送 POST 要求的 SWF 檔不在同一部伺服器上),目標伺服器必須提供允許跨網域存取的 URL 原則。
此外,多部分的 Content-Type 語法必須有效 (符合 RFC2046 標準)。如果語法無效,POST 作業會受限於上載所套用的安全性規則。
在 AIR 中,行動平台上支援 sms: 與 tel: URI 配置。Android 上支援 vipaccess:、connectpro: 及 market: URI 配置。URL 語法會隨著平台慣例而異。例如,在 Android 上,URI 配置必須是小寫。當您使用其中一種配置瀏覽至某個 URL 時,執行階段會在預設應用程式中開啟 URL 以處理配置。因此,瀏覽至 tel:+5555555555
會開啟電話撥號程式,其中已輸入指定的號碼。您必須有個別的應用程式或公用程式 (像是電話撥號程式),才能處理 URL。
下列程式碼會顯示如何在 Android 上叫用 VIP Access 和 Connect Pro 應用程式:
//Invoke the VIP Access Application. navigateToURL(new URLRequest("vipaccess://com.verisign.mvip.main?action=securitycode")); //Invoke the Connect Pro Application. navigateToURL(new URLRequest("connectpro://"));
參數
request:URLRequest — 指定要瀏覽之 URL 的 URLRequest 物件。
針對 Adobe AIR 中執行的內容,當您使用 | |
window:String (default = null ) — 要在其中顯示 request 參數指定之文件的瀏覽器視窗或 HTML 頁框。 您可以輸入特定視窗的名稱,或使用下列其中一個值:
如果您並未指定此參數的值,就會建立新的空白視窗。 在獨立播放程式中,您可以指定新的 ( 注意:如果於具有檔案系統的本機安全執行程序中執行的 SWF 檔中的程式碼呼叫 |
擲回值
IOError — request 物件的 digest 屬性不是 null 。只有在載入 SWZ 檔 (Adobe 平台組件) 過程中用於呼叫 URLLoader.load() 方法時,才需設定 URLRequest 物件的 digest 屬性。
| |
SecurityError — 在 Flash Player (以及 Adobe AIR 的非應用程式安全執行程序內容中),這項錯誤會在下列情況下擲出:
| |
Error — 如果不是為了回應使用者的動作 (例如滑鼠事件或按下按鍵事件) 而呼叫方法。這項需求只會套用至 Flash Player 的內容以及 Adobe AIR 的非應用程式安全執行程序內容。
|
更多範例
相關 API 元素
範例 ( 如何使用本範例 )
package { import flash.display.Sprite; import flash.net.navigateToURL; import flash.net.URLRequest; import flash.net.URLVariables; public class NavigateToURLExample extends Sprite { public function NavigateToURLExample() { var url:String = "http://www.adobe.com"; var variables:URLVariables = new URLVariables(); variables.exampleSessionId = new Date().getTime(); variables.exampleUserLabel = "Your Name"; var request:URLRequest = new URLRequest(url); request.data = variables; try { navigateToURL(request); } catch (e:Error) { // handle error here } } } }
// Requires // - Button symbol on Stage (or a display object, such as a MovieClip) with instance name "buttonSymbol" // buttonSymbol.addEventListener(MouseEvent.CLICK, buttonSymbol_click); function buttonSymbol_click(evt:MouseEvent):void { var req:URLRequest = new URLRequest("http://www.adobe.com/"); navigateToURL(req, "_blank"); }
var request:URLRequest = new URLRequest( "tel:+5555555555" ); navigateToURL( request );
var request:URLRequest = new URLRequest( "sms:+5555555555" ); navigateToURL( request );
var request:URLRequest = new URLRequest( "market://search?q=pname:com.adobe.flashplayer" ); navigateToURL( request );
registerClassAlias | () | 函數 |
public function registerClassAlias(aliasName:String, classObject:Class):void
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
當物件以 Action Message Format (AMF) 編碼時,會保留該物件的類別 (類型)。 當您將物件編碼成 AMF 時,這個函數就會儲存其類別的別名,以便解碼物件時可以復原此類別。 如果編碼內容並未註冊物件之類別的別名,此物件就會編碼成匿名物件。 同樣地,如果解碼內容並未註冊相同的別名,就會針對解碼資料建立匿名物件。
LocalConnection、ByteArray、SharedObject、NetConnection 和 NetStream 都是以 AMF 編碼物件的類別範例。
編碼和解碼內容不需要針對別名使用相同的類別。如果目標類別包含來源類別序列化的所有成員,它們就可以根據目的來變更類別。
參數
aliasName:String — 要使用的別名。
| |
classObject:Class — 與指定別名相關聯的類別。
|
擲回值
TypeError — 如果任一個參數為 null 的話。
|
相關 API 元素
範例 ( 如何使用本範例 )
registerClassAlias()
函數為類別 ExampleClass 註冊一個別名 (com.example.eg
)。 由於是為類別註冊別名,因此就能將物件還原序列化成 ExampleClass 的實體,而程式碼也會輸出 true
。 如果將 registerClassAlias()
呼叫移除,程式碼就會輸出 false
。
package { import flash.display.Sprite; import flash.net.registerClassAlias; import flash.utils.ByteArray; public class RegisterClassAliasExample extends Sprite { public function RegisterClassAliasExample() { registerClassAlias("com.example.eg", ExampleClass); var eg1:ExampleClass = new ExampleClass(); var ba:ByteArray = new ByteArray(); ba.writeObject(eg1); ba.position = 0; var eg2:* = ba.readObject(); trace(eg2 is ExampleClass); // true } } } class ExampleClass {}
sendToURL | () | 函數 |
public function sendToURL(request:URLRequest):void
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
會將 URL 要求傳送至伺服器,但忽略任何回應。
若要檢查伺服器回應,請改用 URLLoader.load()
方法。
您不可以連接到常用的保留連接埠。完整的封鎖連接埠清單,請參閱在「ActionScript 3.0 開發人員指南」中的「限制網路 API」。
您可以拒絕 SWF 檔使用這個方法,方式是在包含 SWF 內容的 HTML 網頁中,設定 object
和 embed
標籤的 allowNetworking
參數。
在 Flash Player 10 和更新版本中,如果您使用包含上載 (由 POST 主體中 "content-disposition" 檔頭的 "filename" 參數指示) 的多部分 Content-Type (例如 "multipart/form-data"),POST 作業會受限於上載所套用的安全性規則:
- 必須執行 POST 作業,以回應使用者啟動的動作 (例如按下滑鼠或按下按鍵)。
- 如果 POST 作業會跨越網域 (POST 目標與傳送 POST 要求的 SWF 檔不在同一部伺服器上),目標伺服器必須提供允許跨網域存取的 URL 原則。
此外,多部分的 Content-Type 語法必須有效 (符合 RFC2046 標準)。如果語法無效,POST 作業會受限於上載所套用的安全性規則。
如需安全性詳細資訊,請參閱「Flash Player 開發人員中心」主題:安全性。
參數
request:URLRequest — URLRequest 物件,指定要做為資料傳送目標的 URL。
|
擲回值
SecurityError — 本機不受信任的 SWF 檔無法與網際網路進行通訊。 您可以透過將此 SWF 檔重新分類為「具有網路連線的本機」或受信任,避免此情況。
| |
SecurityError — 您不可以連接到常用的保留連接埠。完整的封鎖連接埠清單,請參閱在「ActionScript 3.0 開發人員指南」中的「限制網路 API」。
|
範例 ( 如何使用本範例 )
package { import flash.display.Sprite; import flash.net.URLRequest; import flash.net.URLVariables; import flash.net.sendToURL; public class SendToURLExample extends Sprite { public function SendToURLExample() { var url:String = "http://www.yourDomain.com/application.jsp"; var variables:URLVariables = new URLVariables(); variables.sessionId = new Date().getTime(); variables.userLabel = "Your Name"; var request:URLRequest = new URLRequest(url); request.data = variables; trace("sendToURL: " + request.url + "?" + request.data); try { sendToURL(request); } catch (e:Error) { // handle error here } } } }
Tue Jun 12 2018, 04:03 PM Z