·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]swf如何和网页通信?附解决安全沙箱方法

时间:2012-08-10 09:41ACong
如果我们只是做一个单机版的swf,与世隔绝,那么完全不会接触到接下来我们要说的这么多东西。可见提高对你项目的要求是使你学习更多知识的方法

  如果我们只是做一个单机版的swf,与世隔绝,那么完全不会接触到接下来我们要说的这么多东西。。。可见提高对你项目的要求是使你学习更多知识的方法。

  最常见的,我们有这样一个主swf(为了简单说明,再假设只有这么一个swf),另外我们有很多资源:jpg,png,xml,txt,swf等等,我们将之放在一个文件夹Resource下,然后将Resource和主swf放在同一个目录下,然后我们通过这个swf加载、访问这些资源,我们发现,非常没有问题。

  然而,当我们最终需要将这个swf放在网页上,并且将那些资源都放在网页上,那么他们最好还是跟本地一样的文件结构存放,但是我们知道,网页上的swf肯定不会自己跑出来显示,肯定是要网页来加载他,在网页中通过"***.swf?p=...&p2=.."这样的方式来调用这个swf和传参数。如果这个网页也是和swf放在同一个文件夹下,那也是没问题的。可是我们有可能会有很多这样的网页,都放在一个文件夹很难管理,于是我们将他们放在不同的文件,这就会导致这样的问题:A网页是放在"../1/2/A",B网页是"../5/5/B",那么URLRequest的默认路径是哪个呢?是主swf所在的位置么?错,其实是看具体调用它的网页的地址,例如A调用时,URLRequest默认路径是"../1/2/",这样的话,如果我们URLRequest()时只会在A或B下面找,而不会在swf所在的目录中找,自然找不到。所以我们的做法是:获得主swf的绝对路径,将之作为URLRequest的路径。要想获得该swf的绝对路径,可以这样:test = stage.loaderInfo.url; 另外我们要将文件名去掉:
test .slice(0,test.lastIndexOf("/")+1);理论上这在本机上也行得通,但是实际上是:显示安全沙箱出错或者是加载资源出错。为什么呢?

  看看这个例子就知道了:
  在本机上,我们运行swf,得到的test的值为file:///C://test/test.swf,路径也就是file:///C://test/
  在本机上,我们运行同个目录下的html文件,发现沙箱问题、加载问题等等问题,test的值是file://C:\test\,这就难怪他找不到了

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

  由于之前这个问题一直缠绕着我,导致我将它和安全沙箱问题混淆了,以为安全沙箱是多么恐怖的事情。

  其实安全沙箱很简单:
  当两个不同文件夹下面的文件(这两个文件至少一个是swf)要通信时,会出现安全沙箱问题。可用下面的任意一个方法解决:
1.在swf里面通过Security.allowDomain("另一个文件的地址和名字");
2.在另一个文件所在文件夹下建一个crossdomain.xml,里面写上:
<cross-domain-policy><allow-access-from domain="允许访问的对方的地址和名字" /></cross-domain-policy>
3.如果这两个文件中一个是网页的话,可以在网页调用swf的标签处加上:allowScriptAccess="允许访问的对方的地址和名字"
4.万不得已、仅在平时调试时:在C:\windows\system32\Macromed\Flash\FlashPlayerTrust 下面,新建一个随便的txt文件,里面将你要设置为同个域的文件名(包括路径),每个一行写在里面,然后将文件改后缀为.cfg(其实txt应该也没问题)。

相关链接:

[AS3]swf如何和网页通信?附解决安全沙箱方法
[AS3]Flash安全沙箱——安全域和程序域的介绍和应用
[AS3]as3跨域传输数据的授权文件crossdomain.xml代码示例 
[AS3]主流网站crossdomain文件写法youku/tudou/ku6/taobao/163/QQ
[AS3]as3.0允许Flash跨域加载数据swf,jpg,xml等文件
[AS3]flash跨域策略文件crossdomain.xml配置分析说明
[AS3]AllowScriptAccess与allowNetworking的用法介绍
[AS3]as3.0关于LoaderContext详细介绍[安全沙箱相关]
[AS3]as3.0跨域加载外部图片外部xml的代码示例
[AS3]如何绕开AS3安全沙箱进行跨域加载SWF文件
[AS3]as3.0跨域加载外部图片外部xml的代码示例

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器