flash.net 包包含 navigateToURL()sendToURL() 函数。在 JavaScript 中,可以分别以 window.runtime.navigateToURL()window.runtime.sendToURL() 形式访问这两个函数;若使用 AIRAliases.js 文件,则分别以 air.navigateToURL()air.sendToURL() 形式访问。
公共方法
 函数定义方
  
navigateToURL(request:URLRequest, window:String = null):void
在包含 Flash Player 容器的应用程序(通常是一个浏览器)中,打开或替换一个窗口。
flash.net
  
sendToURL(request:URLRequest):void
向服务器发送一个 URL 请求,但忽略任何响应。
flash.net
函数详细信息
navigateToURL()函数 
function navigateToURL(request:URLRequest, window:String = null):void
运行时版本:  1.0

在默认系统 Web 浏览器中打开 URL。

重要安全提示

开发人员通常将获取自 FlashVars 等外部来源的 URL 值传递给 navigateToURL() 函数。攻击者可能会尝试操纵这些外部来源,以进行跨站脚本等攻击。因此,开发人员应该验证所有 URL,然后才能将其传递给此函数。

良好的 URL 数据验证蕴含着许多不同的技术,具体取决于 URL 在整个应用程序中的用法。最常用的数据验证技术包括了验证 URL 的方案是否适当。例如,无意中允许 javascript: URL 可能会导致跨站脚本攻击。验证 URL 位于您的域内可以确保进行仿冒攻击的人无法使用 SWF 文件作为 open 请求的重定向器。如要增强安全性,还可以验证 URL 的路径,并验证 URL 符合 RFC 指导原则

参数

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

使用 navigateToURL() 函数时,运行时将使用 POST 方法的 URLRequest(其 method 属性设置为 URLRequestMethod.POST)视为使用 GET 方法。

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

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


引发
IOError request 对象的 digest 属性不是 null。如果在加载 SWZ 文件(一个 Adobe 平台组件)时调用 URLLoader.load() 方法,仅应设置 URLRequest 对象的 digest 属性。
 
SecurityError — 在 Flash Player(和 Adobe AIR 中的非应用程序沙箱内容)中,以下情况将引发此错误:
  • 本地不受信任的 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 — 为了响应用户动作(如鼠标事件或按键事件),将不会调用此方法。此要求仅适用于 Flash Player 中的内容和 Adobe AIR 中的非应用程序沙箱内容。

示例

下例在一个新的浏览器窗口中打开 URL http://www.adobe.com,并将在 URLVariables 对象中所捕获的用户会话数据传递给 Web 服务器。
<html>
    <head>
      <script src="AIRAliases.js" />
      <script>
        function init() {
            var url = "http://www.adobe.com";
            var variables = new air.URLVariables();
            variables.exampleSessionId = new Date().getTime();
            variables.exampleUserLabel = "Your Name";
            var request = new air.URLRequest(url);
            request.data = variables;
            try {            
                air.navigateToURL(request);
            }
            catch (e) {
                // handle error here
            }
        }
      </script>
    </head>
    <body onload='init()'>
    </body>
</html>
sendToURL()函数 
function sendToURL(request:URLRequest):void
运行时版本:  1.0

向服务器发送一个 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 的应用程序。
 <html>
    <head>
      <script src="AIRAliases.js" />
      <script>
        function init() {
            var url = "http://www.yourDomain.com/application.jsp";
            var variables = new air.URLVariables();
            variables.sessionId = new Date().getTime();
            variables.userLabel = "Your Name";

            var request = new air.URLRequest(url);
            request.data = variables;
            air.trace("air.sendToURL: " + request.url + "?" + request.data);
            try {
                air.sendToURL(request);
            }
            catch (e) {
                // handle error here
            }
        }
      </script>
    </head>
    <body onload='init()'>
    </body>
</html>