解决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,在这里就算是抛砖引玉吧,如果大家有什么
好的方法,请踊跃发表.学无止境!
正确的思路+正确的方法=成功
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |