ActionScript 3:如何从URL获取主机名?

时间:2009-02-16 06:04:58

标签: flash actionscript-3

我正在尝试设置XML文件的路径,该文件在本地或服务器上运行时会有所不同。

如何确定Flash是否在本地运行? (我想检查网址是否包含“http://localhost”,但是如何获取窗口网址?)

提前致谢

4 个答案:

答案 0 :(得分:6)

您可以通过外部API

向外部窗口(容器)询问此信息
if (flash.external.available) // An external window is not always available
{
    var win:* = flash.external.call("window.location"); // evaluate window.location
    // depending on browser there are several properties like 'host' you can use
    // to get the actual hostname
    // e.g. win.host == "localhost"
}

如果上述方法不起作用,则需要创建一个包装函数,以便从JavaScript返回该window.location对象。请注意,win对象上可用的属性完全由浏览器设置,并且因浏览器而异。这也意味着flash播放器(如果你在浏览器环境之外运行flash播放器托管的电影,你会得到window.location属性,这在部署你的电影时有用,但在调试时没有)

点击此处查看更多信息

答案 1 :(得分:4)

如果您的应用程序是Flex应用程序,则可以通过应用程序对象的url属性检索主SWF文件的URL。这可以通过parentApplication.url从控制器树中的任何位置访问,或者,如果对象不是控制器树的一部分,则Application.application.url

对于普通的AS3项目,您需要访问主精灵的loaderInfo属性,例如,_root.loaderInfo.url会为您提供相同的信息。

答案 2 :(得分:3)

mokee是正确的,因为您需要在本地运行时指定访问XML的相对路径。您应该在服务器上的某个位置匹配此文件夹结构。但是,通常需要在此相对路径前面附加不同的基本路径以指向这些文件夹的特定版本。例如,我们的代理商经常有几种不同的环境。开发构建,测试服务器,不同的实时环境。您不希望硬编码这些加上您需要一些方法来确定实际使用哪一个。

此问题的解决方案通常是将basePath作为FlashVar

传递

看一下如何将FlashVar传递到swf

的解决方案

http://blogs.adobe.com/pdehaan/2006/07/using_flashvars_with_actionscr.html

设置指向服务器上basePath的flash var。像

这样的东西
FlashVars="basePath=http://www.yourdomain.com/flash"

然后在actionscript中,您可以检查此basePath是否存在。如果没有,那么您知道自己在本地运行,因此您只使用已设置的相对路径,该路径在本地运行。如果有basePath,则将此前缀添加到相对路径的前面,并使用此URL加载xml。

通常这样做并且效果很好。

答案 3 :(得分:1)

设置XML绝对相对路径:'/ temp / data.xml'。就像它一样,它将在'http://yourhost.com/temp/data.xml'搜索XML。

如果它设置为'temp / data.xml',它将始终相对于SWF搜索它。

如果你很高兴并且你知道,data.xml。