flash as3.0 跨域的解决方法

更新时间:15-10-22 23:00 热度:389
 
    flash跨域问题信任不是全部人都可以碰到,假如你在本地宣布,还是说直接ctrl+enter在flashide中预览,是不会碰到跨域问题的,当然,跨域有个前提,那就是flash不是绝对独立的,与外界要做一点通信和交互,假如你的flash是绝对独立的文件,没有和外界发生不论什么交互和数值通信的话,那末你可以不思索问题跨域问题,由于这也不存在跨域问题。啥子是跨域?    跨域简单的说就是过访其它域名的文件或资源,譬如a.com的flash去过访b.com的资源,那末便会引动跨域的问题,由于a.com和b.com不是同一个域名。为何有跨域问题?    实际上不止只是flash,javascript等一点脚本代码也有跨域的问题,这个主要是自身的安全机制所表决的,由于跨域过访一点文件或资源有一定的危险性,他超过了网站自身的范围,对于站外的资源没有办法审查核定其安全性,在网络病毒木马一天比一天凶猛放肆的今日,跨域限止过访是其安全策略的一个关紧解决手眼。跨域有啥子问题?    跨域的问题有众多,最直接的就是所过访的文件被限止了,这么一来,你的flash就不可以正常办公了,所以是让人很头痛的一件事物。如今的flash已经不止只是作为一个动画了,更多的有了数值交互,所以和外界的通信来作为一个相互作用性比较强的中介来展出,跨域也是那里面务必解决的一个问题。恩,那或许有人说了,既是有跨域的问题,那我把资源都放在同一个域名义之下不就可以了?恩,确实可以这么做,不过有时我们也会碰到过访外部资源的事情状况,并且在一个比较正规的项目中,flash和html往往是分开放的,众多企业也是这么,为了易于保护和管理,所以跨域的问题就容易显露出来。1、flash自身的安全机制设置:     flash中,在ide运行是没有不论什么安全限止的,不过宣布出去的话,便会有不少限止,flash有2中宣布形式,一个是仅过访网络,一个是仅过访本地,大家可以在文件-宣布设置-flash选项卡入眼见,注意务必是在flash文件管用时才会有哦,假如现时编辑的是as文件是木有这个挑选点菜单的:     这处就已经限止了flash的安全级别,若是只过访本地,那末flash中全部的对web的过访都将严禁,而只过访网络的话,对本地的文件过访都将严禁,所以大家依据实际的用场来挑选,假如你期望你的flash放到web上,那末就挑选只过访网络,这么的话你测试就必须放在webservice中测试了,本地运行便会显露出来各种问题(假如有数值通信的话),例如:测试urlhttp://127.0.0.1/123.swf。2、actionscript代码设置:    as2写法:
复制代码

代码如下所述:

system.security.allowdomain("*");//针对不一样http资源system.security.allowinsecuredomain("*");//针对需求安全证验的资源,譬如https

    as3写法:

复制代码

代码如下所述:

flash.system.security.allowdomain("*");flash.system.security.allowinsecuredomain("*");

    上头就是严明的写法,as3还好说,大家要注意一下子as2,as2是木有flash.system这个包的,不过你import flash.system并不会报错,所以假如你把as3的代码复制进去运行固然一切正常,不过实际是木有不论什么效果的。必须要注意!上头的代码就是说准许flash去过访不论什么url资源,假如只想过访特别指定的url,就把*改成该url即可,假如多个url,就用逗点中间隔断就可以了,注意allowinsecuredomain是准许过访带证验的url资源,譬如https打头的,假如你过访的只是平常的http的话就不必了。3、html的设置:
    假如你需求和页面的js通信,那末html里就务必有这么一个参变量:

复制代码

代码如下所述:

<param name="allowscriptaccess" value="always" />

    参变量always表达始末准许脚本代码过访,若是never,就表达始末不准许。4、加载外部资源:    假如你要读取一个外部文件,譬如swf,picture,mp3等等,那末就需求一个跨域策略文件(crossdomain.xml),这个实际上就是一个xml文件,具体内部实质意义是:

复制代码

代码如下所述:

<?xml version="1.0"?><cross-domain-policy> <allow-access-from domain="www.explorechn.com" /> <allow-access-from domain="explorechn.com" /> <allow-access-from domain="223.4.119.191" /></cross-domain-policy>

    这就是跨域策略文件,allow-access-from domain表达准许过访的url,假如有多个顺次添加,假如准许全部就一个 allow-access-from domain = "*"就可以了。需求解释明白一下子这个文件该怎么用,假如你的flash在a.com下,你需求过访b.com的资源,那末把这个xml放在b.com的根目次就可以半自动过访了,当然,你也可以过访其它目次的策略文件。

复制代码

代码如下所述:

flash.system.security.loadpolicyfile(url:string);

    经过这个loadpolicyfile就可以主动去加载一个安全策略文件了,注意上头是as3的写法,as2不同哦,参照上头的写法。5、各个浏览器的跨域问题:    ie就不说了,这个基本没啥问题,涵盖flash自个儿生成的html就对ie的支持做的美好,这处就说说chrome和ff的问题:对于flash,ie是认object标签的,不过ff和chrome是认embed标签的,所以这个很关紧,假如在调整的时刻,发觉firebug等工具提醒"...... is not a function",我们就要从以下地方查寻端由:    1、addcallback是否成功注册    2、allowscriptaccess是否准许always,默许不准许    3、flash是否绝对加载完结    普通来说,第三点是我们最容易碰到的,假如你的flash没有加载完结就去调配使用函数的话,是找不到这个函数的。    这处需求注意额外一个不正确提醒,就是"error calling method on npobject",假如显露出来这个不正确,就要谨慎了:    1、安全策略问题,请参照上头全部的解决方案    2、自身函数不正确