论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Flash AS教程
Tag:2.0,3.0菜鸟,游戏,,cs,技巧,源码,,文本,文字,函数,音乐,随机,拖拽,asp,access,xml,mc,视频教程

解决flash与URL问题的方法在于如何巧用_root._url

文章类别:Flash AS | 发表日期:2009-8-2 17:01:03

解决flash与URL问题的方法在于如何巧用_root._url

时下很多人用CenFun Music Player播放器(论坛:http://bbs.cenfun.com/),并把它引到QQ空间,给爱扮QQ空间的Q族们


首先说明下我flashMP3播放器包含的文

件:eote.swf和songs.xml,eote.swf是flashMP3,songs.xml是外部更新mp3信息文件).

      不过很快就收到他们反映的问题:在存放flashMP3播放器的空间上是可以播放的,但把eote.swf引到QQ空间或其他论坛

时就播放不了.我检查了一遍,发现引用到QQ空间或其他论坛时载入不了songs.xml,因为我是在flash中是这样载入ongs.xml

的:

myxml=new XML();

myxml.load("songs.xml")

用的是相对路径,这样当把eote.swf引到其他地方时,自然就不能载入songs.xml了,自然也就不能播放了.

既然找到了问题,就要解决它.也许你会说,把myxml.load("songs.xml")改成绝对路径不就行了吗?对,没错,这样是行了,但当这

个播放器放于不同的空间时,songs.xml的地址也就不同了,这时就不得一个个来改myxml.load("songs.xml")的绝对路径了,这

样做实在是太麻烦了!一两个还行,上百上千上万个那还不得累个半死.

      我的想法就是:有没有办法让eote.swf来检测songs.xml的绝对路径,这样就不必每换一个存放空间就改一次.有了绝对路

径,eote.swf引到其他地方时也能播放.有了想法,但要解决这个问题对我来说还是有点难,想好久也没想通,我就上论坛求助.

cenfun论坛:http://bbs.cenfun.com/dispbbs.as ... ;ID=2779&page=1

闪吧论坛:http://space.flash8.net/bbs/thread-318889-1-1.html

经典论坛:http://bbs.blueidea.com/thread-2710072-1-2.html

蓝屋的快闪分坛:http://www.hslk.com/lkbbs/dispbb ... ;ID=9195&page=1

        由于表达不是很清楚,致使大家很多人都不知我要问什么.问题也就得不到解决.

在回答我的问题中,经典论坛的一位坛友给了我启示:_root._url

查看帮助,了解到_url是检索创建的 SWF 文件的 URL,我用trace(_root._url),发现返回的是该SWF 文件的绝对地址.有兴趣

的朋友的可以做个试验:在主场景创建一个动态文本,实例名为:testurl_txt,在第一帧写AS:

testurl_txt.text=_root._url;

导出名为testurl.swf文件,放到空间上去,会发现返回的是testurl.swf绝对路径.

那么,放在http://hcf214236.808.nuno.cn/空间的eote.swf的绝对地址就是http://hcf214236.808.nuno.cn/eote.swf(你这话不

是废话吗?),至此我们学会了在flash怎样获得eote.swf文件的绝对地址(用_root._url).

     这时有人就问了,你获得eote.swf的绝对地址有什么用,和songs.xml文件有关系吗?有关系,这关系相当的大了,因为

eote.swf文件和songs.xml是放在同一目录的(假设是这样的),那么songs.xml的绝对路径就是

http://hcf214236.808.nuno.cn/songs.xml(又是废话一句).有了eote.swf的绝对路径,我们应该怎样让eote.swf自己判断出

songs.xml的绝对路径呢?我们再看看eote.swf和songs.xml的绝对路

径:http://hcf214236.808.nuno.cn/eote.swf,http://hcf214236.808.nuno.cn/songs.xml,仔细看后,会发现

http://hcf214236.808.nuno.cn/这部分是相同的.既然找到了共同点,那就好办了,我们只要把

ttp://hcf214236.808.nuno.cn/eote.swf拆分为两部分,http://hcf214236.808.nuno.cn/和eote.swf,把第一部分加在songs.xml

的前面,就得到了songs.xml的绝对路径了(怎么还是废话啊!),


myxml=new XML();

myxml.load("http://hcf214236.808.nuno.cn/"+"songs.xml")

总结一下:


原理就是这样:首先通过_root._url获得eote.swf的绝对路径,然后把eote.swf的绝对路径分割为http://********/和eote.swf两部分.把

http://********/附加到songs.xml的后面(前提是eote.swf和songs.xml必须在同一目录).

       获得eote.swf的绝对路径我们已经解决了,接下来的就是把eote.swf的绝对路径分割为http://********/和eote.swf两部分

提到分割,可能很多人都会想到String里的split方法,该方法是:

split(String.split 方法)
public split(delimiter:String, [limit:Number]) : Array

在指定的 delimiter 参数出现的所有位置断开 String 对象,将其拆分为子字符串,然后以数组形式返回子字符串。如果使

用空字符串 ("") 作为分隔符,则该字符串中的每个字符都将作为一个元素放入到数组中。

如果未定义 delimiter 参数,则会将整个字符串放入返回的数组的第一个元素中。

既然知道了方法,我们还等什么,赶快动手吧!

在第一帧写AS:

var rooturl_String = new String(_root._url);
//定义String对象,并把_root._url的值作为字符串附加给这个对象.

var rooturl_Array = rooturl_String.split("testurl.swf");
//以testurlswf为分割符,把_root._url的值拆分为两个子符串,并存放在rooturl_Array数组里.

var testxml = new XML();
//定义XML对象

testxml.ignoreWhite = true;
//忽略空白

System.useCodepage = true;
//防止载入外部文本时出现乱码

testxml.load(rooturl_Array[0]+"test.xml");
//把rooturl_Array的第一部分附加在test.xml后面,这样就得到test.xml的绝对路径了

testxml.onLoad = function(success) {
if (success) {
  testxml_txt.text = testxml;
} else {
  testxml_txt.text = "载入出错!请检查";
}
};

第二步:
创建个动态文本,实例名为:testxml_txt
第三步:导出swf文件,命名为testurl.swf(一定要为testurl.swf)
第四步:创建名为test.xml的xml文件,(也一定要为test.xml)
test.xml里的内容如下:
<?xml version="1.0" encoding="GB2312" ?>
   <data>
   你想要输入的内容
   </data>
第五步:在本地或上传到空间去测试.

至此,问题就搞定了.特别要注意:testurl.swf和test.xml要在同一目录,放在空间时,要在根目录里.

这样做的好处是,任何人把testurl.swf和test.xml放在空间的根目录,再引用到其他地方时就不必在fla文件里改test.xml的地址

了.这样省去了很多麻烦.   当然有利也有弊,这样容易暴露xml文件的地址,被他人窃取.

分割_root._url的方法还有很多种,像以"."号分割,"/"分割,原理都是一样,我是看那种方法简单就用那种了.


_root._url的用处还有很多,在这里,我只就解决自己的问题学习了一下_root._url,在这里就算是抛砖引玉吧,如果大家有什么

好的方法,请踊跃发表.学无止境!

                                   正确的思路+正确的方法=成功

视频教程列表
文章教程搜索
 
Flash AS推荐教程
Flash AS热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058