2010-01-05 97 views
1

我正在使用Flex,我需要获取相对URL源属性并在加载它之前将其转换为绝对URL。在Actionscript/Flex中将相对URL转换为绝对URL

我正在处理的具体案例涉及调整SoundEffect的加载方法。我需要确定文件是从本地文件系统加载还是通过网络加载来查看源属性,而我发现这样做的最简单方法是生成绝对URL。

我无法生成声音效果的绝对URL。这是我最初的想法,没有奏效。

  1. 寻找Sound Effect目标的DisplayObject并使用它的loaderInfo属性。 SoundEffect加载时目标为null,所以这不起作用。

  2. 查看FlexGlobals.topLevelApplication,url或loaderInfo属性。但是,这些都没有设置。

  3. 查看FlexGlobals.topLevelApplication.systemManager.loaderInfo。这也没有设置。

的SoundEffect.as代码基本上可以归结为

var url:String = "mySound.mp3"; 
/*>> I'd like to convert the URL to absolute form here and tweak it as necessary <<*/ 
var req:URLRequest = new URLRequest(url); 
var loader:Loader = new Loader(); 
loader.load(req); 

有谁知道如何做到这一点?任何有关澄清如何在ActionScript中解析URLRequests的规则的帮助也将非常值得赞赏。

edit 我也很满意一些方法来判断url是从本地文件系统还是通过网络加载。通过查看绝对URL,可以轻松查看前缀,如file://http://

回答

0

我相信你只需要将你的应用程序的invoke事件的currentDirectory属性放在你的URL的相关部分前面即可获得绝对URL。请注意,这可能仍然包含诸如./和../之类的内容。

下面是一些代码从初步认识Adobe livedocs page

var arguments:Array; 
var currentDir:File; 
public function onInvokeEvent(invocation:InvokeEvent):void { 
    arguments = invocation.arguments; 
    currentDir = invocation.currentDirectory; 
} 
+0

嘿whybird,感谢伸出援手。我需要明天检查它,但是它看起来像onInvokeEvent仅在启动AIR应用程序时被解雇。这也需要为Web应用程序工作。如果可能的话,我也想避免添加一个侦听器,如果信息是可用的。我会修补一下,看看弹出的是什么。 – Bear 2010-01-05 03:44:36

+0

是的,我了解听众,虽然在这种情况下,你可以在它发生一次后杀死它。我相信onvokeEvent也适用于web应用程序的启动。检查上面链接的livedoc中“应用程序调用”标题下的最后一个项目符号。 – whybird 2010-01-05 05:39:39