flash.net 包中具有包级函数,可用于打开新的浏览器窗口,向服务器发送 URL 请求以及处理类别名。
公共方法
 函数定义方
  
查找一个类,这个类先前具有一个通过调用 registerClassAlias() 方法进行注册的别名。
flash.net
  
navigateToURL(request:URLRequest, window:String = null):void
在包含 Flash Player 容器的应用程序(通常是一个浏览器)中,打开或替换一个窗口。
flash.net
  
registerClassAlias(aliasName:String, classObject:Class):void
当以 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

查找一个类,这个类先前具有一个通过调用 registerClassAlias() 方法进行注册的别名。

此方法不与 flash.utils.getDefinitionByName() 方法进行交互。

参数

aliasName:String — 要查找的别名。

返回
Class — 与给定别名相关联的类。如果未找到,将引发异常。

引发
ReferenceError — 未注册别名。

另请参见

navigateToURL()函数 
public function navigateToURL(request:URLRequest, window:String = null):void

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

在包含 Flash Player 容器的应用程序(通常是一个浏览器)中,打开或替换一个窗口。

重要安全性说明

开发人员通常将获取自 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 方法。

无法连接到常用的保留端口。有关已阻止的端口的完整列表,请参阅《ActionScript 3.0 编程》一书的“安全性”一章中的“限制网络 API”。

在浏览器中运行的 Flash Player 10 和更高版本中,以编程方式使用此方法打开弹出窗口可能不会成功。不同的浏览器(和浏览器配置)可能会随时阻止弹出窗口;不能保证可以显示任何弹出窗口。不过,为了尽可能成功,请仅在作为用户操作的直接结果执行的代码中使用此方法打开弹出窗口,例如,在鼠标单击或按键事件的事件处理函数中。

在 Flash Player 10 和更高版本中,如果使用包含上载(由 POST 体内的“content-disposition”标头中的“filename”参数表示)的 multipart Content-Type(例如“multipart/form-data”),则 POST 操作会受应用于上载的安全规则的约束:

另外,对于任何 multipart Content-Type,语法必须有效(根据 RFC2046 标准)。如果语法无效,则 POST 操作受应用于上载的安全规则约束。

有关安全性的详细信息,请参阅以下部分:

参数

request:URLRequest — URLRequest 对象,指定要导航到哪个 URL。

对于在 Adobe AIR 中运行的内容,使用 navigateToURL() 函数时,运行时将使用 POST 方法的 URLRequest(其 method 属性设置为 URLRequestMethod.POST)视为使用 GET 方法。

 
window:String (default = null) — 浏览器窗口或 HTML 帧,其中显示 request 参数指示的文档。可以输入某个特定窗口的名称,或使用以下值之一:
  • "_self" 指定当前窗口中的当前帧。
  • "_blank" 指定一个新窗口。
  • "_parent" 指定当前帧的父级。
  • "_top" 指定当前窗口中的顶级帧。

如果没有为此参数指定值,将创建一个新的空窗口。在独立播放器中,可以指定新的 ("_blank") 窗口,也可以指定已命名的窗口。其它值不适用。

注意:如果在只能与本地文件系统内容交互的沙箱中运行的 SWF 文件中的代码调用 navigateToURL() 函数,并为 window 参数指定一个自定义窗口名称,该窗口名称将转换为一个随机名称。该名称的格式为 "_flashXXXXXXXX",其中每个 X 均代表一个随机的十六进制数字。在同一会话中(直到您关闭包含浏览器窗口),如果您再次调用该函数并为 window 参数指定同一名称,将使用同一个随机字符串。


引发
IOError request 对象的 digest 属性不是 null。如果在加载 SWZ 文件(一个 Adobe 平台组件)时调用 URLLoader.load() 方法,仅应设置 URLRequest 对象的 digest 属性。
 
SecurityError — 在以下情况下,将引发此错误:
  • 本地不受信任的 SWF 文件可能无法与 Internet 进行通信。要避免这种情况,可将此 SWF 文件重新分类为只能与远程内容交互或受信任。
  • 导航操作试图评估伪 URL 的脚本编写,但包含文档(通常是浏览器中的一个 HTML 文档)来自您不具有访问权限的沙箱。要避免这种情况,可以在包含文档中指定 allowScriptAccess="always"
  • 如果 SWF 文件包含在已将 allowScriptAccess 设置为 "none""sameDomain" 的 HTML 页面中,而此 HTML 文件与 SWF 文件的域不匹配,将无法导航特殊窗口 "_self""_top""_parent"
  • 不能导航具有非默认名称的窗口,非默认名称来自位于 local-with-filesystem 沙箱中的 SWF 文件。
  • 无法连接到常用的保留端口。有关已阻止的端口的完整列表,请参阅《ActionScript 3.0 编程》一书的“安全性”一章中的“限制网络 API”。
 
Error — 为了响应用户动作(如鼠标事件或按键事件),将不会调用此方法。

另请参见


示例

下例在一个新的浏览器窗口中打开 URL http://www.adobe.com,并将在 URLVariables 对象中所捕获的用户会话数据传递给 Web 服务器。
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
            }
        }
    }
}
registerClassAlias()函数 
public function registerClassAlias(aliasName:String, classObject:Class):void

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9

当以 Action Message Format (AMF) 对一个对象进行编码时,保留该对象的类(类型)。将对象编码为 AMF 时,该函数将保存该对象的类的别名,以便在解码对象时可以恢复该类。如果编码上下文没有为对象的类注册别名,该对象将被编码为一个匿名对象。同样,如果解码上下文注册了不同的别名,将为解码后的数据创建一个匿名对象。

LocalConnection、ByteArray、SharedObject、NetConnection 及 NetStream 均为将对象编码为 AMF 的类的示例。

编码和解码上下文不必对别名使用相同的类。它们可以主动地改变类,条件是目标类包含源类序列化的所有成员。

参数

aliasName:String — 要使用的别名。
 
classObject:Class — 与给定别名相关联的类。


引发
TypeError — 如果任一个参数为 null

另请参见


示例

此示例使用 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

向服务器发送一个 URL 请求,但忽略任何响应。

若要检查服务器响应,请改为使用 URLLoader.load() 方法。

无法连接到常用的保留端口。有关已阻止的端口的完整列表,请参阅《ActionScript 3.0 编程》一书的“安全性”一章中的“限制网络 API”。

可以在包含 SWF 内容的 HTML 页中设置 objectembed 标签的 allowNetworking 参数,防止 SWF 文件使用此方法。

在 Flash Player 10 和更高版本中,如果使用包含上载(由 POST 体内的“content-disposition”标头中的“filename”参数表示)的 multipart Content-Type(例如“multipart/form-data”),则 POST 操作会受应用于上载的安全规则的约束:

另外,对于任何 multipart Content-Type,语法必须有效(根据 RFC2046 标准)。如果语法无效,则 POST 操作受应用于上载的安全规则约束。

有关安全性的详细信息,请参阅以下部分:

参数

request:URLRequest — URLRequest 对象,指定要将数据发送到哪个 URL。


引发
SecurityError — 本地不受信任的 SWF 文件无法与 Internet 通信。要避免这种情况,可将此 SWF 文件重新分类为只能与远程内容交互或受信任。
 
SecurityError — 无法连接到常用的保留端口。有关已阻止的端口的完整列表,请参阅《ActionScript 3.0 编程》一书的“安全性”一章中的“限制网络 API”。

另请参见


示例

下面的示例将在 URLVariables 对象中捕获的用户会话数据传递到位于 http://www.yourDomain.com/application.jsp 的应用程序。
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
            }
        }
    }
}