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 中,该函数在默认的系统 web 浏览器中打开一个 URL
重要安全提示
开发人员通常将获取自 FlashVars 等外部来源的 URL 值传递给 navigateToURL()
函数。攻击者可能会尝试操纵这些外部来源,以进行跨站脚本等攻击。因此,开发人员应该验证所有 URL,然后才能将其传递给此函数。
良好的 URL 数据验证蕴含着许多不同的技术,具体取决于 URL 在整个应用程序中的用法。最常用的数据验证技术包括了验证 URL 的方案是否适当。例如,无意中允许 javascript: URL 可能会导致跨站脚本攻击。验证 URL 位于您的域内可以确保进行仿冒攻击的人无法使用 SWF 文件作为 open 请求的重定向器。如要增强安全性,还可以验证 URL 的路径,并验证 URL 符合 RFC 指导原则。
例如,以下代码展示了一个执行数据验证的简单示例,其中拒绝不以 http:// 或 https:// 开头的任何 URL,并验证 URL 在您的域名范围内。此例可能并不适用于所有 Web 应用程序,因此您应该考虑是否需要针对 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 文件和包含该文件的 Web 页(如果有)位于受信任的本地安全沙箱时,才允许调用指定 "javascript:"
伪协议(通过作为第一个参数传递的 URLRequest
对象)的 navigateToURL()
方法。一些浏览器不支持通过 navigateToURL()
方法使用 javascript 协议。而应考虑使用 ExternalInterface
API 的 call()
方法在包含该内容的 HTML 页中调用 JavaScript 方法。
在 Flash Player 和 Adobe AIR 中的非应用程序沙箱中,您无法连接常用的保留端口。有关已阻止的端口的完整列表,请参阅《ActionScript 3.0 开发人员指南》中的“限制网络 API”。
在浏览器中运行的 Flash Player 10 和更高版本中,以编程方式使用此方法打开弹出窗口可能不会成功。不同的浏览器(和浏览器配置)可能会随时阻止弹出窗口;不能保证可以显示任何弹出窗口。不过,为了尽可能成功,请仅在作为用户操作的直接结果执行的代码中使用此方法打开弹出窗口,例如,在鼠标单击或按键事件的事件处理函数中。
在 Flash Player 10 和更高版本中,如果使用包含上载(由 POST 体内的“content-disposition”标头中的“filename”参数表示)的 multipart Content-Type(例如“multipart/form-data”),则 POST 操作会受应用于上载的安全规则的约束:
- 必须执行 POST 操作以响应用户启动的操作(如鼠标单击或按键)。
- 如果 POST 操作是跨域的(POST 目标与发送 POST 请求的 SWF 文件不在同一台服务器上),则目标服务器必须提供一个允许跨域访问的 URL 策略文件。
另外,对于任何 multipart 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 — URLRequest 对象,指定要导航到哪个 URL。
对于在 Adobe AIR 中运行的内容,当使用 | |
window:String (default = null ) — 浏览器窗口或 HTML 帧,其中显示 request 参数表示的文档。可以输入某个特定窗口的名称,或使用以下值之一:
如果没有为此参数指定值,将创建一个新的空窗口。在独立播放器中,可以指定新的 ( 注意:如果在只能与本地文件系统内容交互的沙箱中运行的 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 内容的 HTML 页中设置 object
和 embed
标签的 allowNetworking
参数,防止 SWF 文件使用此方法。
在 Flash Player 10 和更高版本中,如果使用包含上载(由 POST 体内的“content-disposition”标头中的“filename”参数表示)的 multipart Content-Type(例如“multipart/form-data”),则 POST 操作会受应用于上载的安全规则的约束:
- 必须执行 POST 操作以响应用户启动的操作(如鼠标单击或按键)。
- 如果 POST 操作是跨域的(POST 目标与发送 POST 请求的 SWF 文件不在同一台服务器上),则目标服务器必须提供一个允许跨域访问的 URL 策略文件。
另外,对于任何 multipart Content-Type,语法必须有效(根据 RFC2046 标准)。如果语法无效,则 POST 操作受应用于上载的安全规则约束。
有关安全性的详细信息,请参阅 Flash Player 开发人员中心主题:安全性。
参数
request:URLRequest — URLRequest 对象,指定要将数据发送到哪个 URL。
|
引发
SecurityError — 本地不受信任的 SWF 文件无法与 Internet 通信。要避免这种情况,可将此 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, 11:20 AM Z