[ActionScripte 3.0] swf和网页通信

很多时候,我们需要将swf放到网页加载,并且将相应的资源都放到网页上,在网页中加载swf通常是通过"*.swf?p=..&p2=..."这样的方式来调用这个swf和传参数的,如果这个网页和swf放在同一个目录(即同一个文件夹下)是没有问题的,可是对于一个项目来说,我们可能会有很多这样的网页,都放在一个文件夹下很难管理,于是我们需要把他们放到不同的文件夹下,比如用a.html去加载b.swf,a.html在../1/2下,b.swf在../3/4下,那我们的swf怎么去加载与swf同目录的资源呢,我们的做法是:获得swf的所在的绝对路径,要获得swf的绝对路径,可以这样:var url:String = stage.loaderInfo.url;我们需要将文件名去掉url.slice(0,url.lastIndexOf("/")+1);在网页上自然行得通了,按道理本机也行得通,但是实际上:显示安全沙箱出错或者加载资源出错,why?

在本机上,我们运行swf,得到url的值为,路径也就是file:///C://upload/;

在本机上,我们 运行同目录下的html文件,发现沙箱问题,加载问题等,url的值是file://C:\upload\,所以找不到

于是我们需要改成:url.slice(0,url.lastIndexOf("\\")+1);注意:前面的\只是转义字符,实际上就是让路径遇到最后一个"\"时截止,这样本机运行就没问题了。

下面写个例子:

var url:String="";
this.loaderInfo.addEventListener(Event.COMPLETE,onLoaderComplete);//当swf自身加载完成后调用
function onLoaderComplete(e:Event):void{
    this.loaderInfo.removeEventListener(Event.COMPLETE,onLoaderComplete);
    url = stage.loaderInfo.url;//获得主swf的绝对路径,将之作为URLRequest的路径
    url = url.slice(0,url.lastIndexOf("/")+1);//将文件名去掉
    url = url.slice(0, url.lastIndexOf("\\") + 1);//前面的\只是转义字符,实际上就是让路径遇到最后一个"\"时截止,为了能在本机上运行.
    //补充说明:下面代码是接收从html传过来的参数,html传参数一般有两种方式,swf皆可以用下面方式获取这些参数,欲知请继续阅读:
    for(var key:String in paramObj){
          trace(paramObj[key]);
    }
    trace((e.target as LoaderInfo).parameters["url"],"htm参数url");
    trace((e.target as LoaderInfo).parameters["callbackfn"],"htm参数callbackfn");
    trace((e.target as LoaderInfo).parameters["cf"],"htm参数cf");
}

从html传参一般有两种方式:

一:

<param name="movie" value="/swf/Upload.swf?url=http://localhost:15100/Handler.ashx&callbackfn=fasdfdasf&cf=upfile.c" />

二:

<param name="movie" value="/swf/Upload.swf" />
<param name="FlashVars" value="url=http://localhost:15100/Handler.ashx&callbackfn=fasdfdasf&cf=upfile.c" />

 

posted on 2015-03-05 13:18  晏过留痕  阅读(625)  评论(0编辑  收藏  举报