全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在Flash播放器运行时,将不同来源的资源划分到独立的沙箱(sandbox)内,不同沙箱之间不能彼此操作数据(除非目标沙箱做过一些设置,授权其他沙箱可访问),这就是Flash的跨沙箱问题。当Flash文件(.swf) 和页面(.html)不在同一个域名下时,如果不经过Flash内部声明System.allowDomain,html无法访问flash定义的接口;不经过html设置allowScriptAccess为always,Flash也无法调用页面上的js函数。那么如果html和flash都设置了互相可以访问,是否Flash和html之间就可以互相访问了呢?理论上是的,然而实际上却不是。在Chrome、Firefox等非IE浏览器上,是没有问题的。在“纯正”的IE6、IE7、IE8上也是正常的。但是在傲游、360浏览器、腾讯浏览器等基于IE的多标签浏览器中,刷新页面的时候,Flash播放器还是会抛安全沙箱错误。点击访问测试页面。使用上面说的“基于IE的多标签浏览器”访问,你会看到,第一次是正常的,刷新之后就不正常。如果你安装的是debug版本的播放器,可以看到Flash运行时发生了异常。SecurityError: Error #2060: 安全沙箱冲突:ExternalInterface 调用者 http:/pnq.cc/temp/test-dmm-crssdmn.swf 不能访问 http:/q.pnq.cc/works/test/test-dmm-crssmn.html。at flash.external:ExternalInterface$/_initJS()at flash.external:ExternalInterface$/call()at Main/start()at Main/init()at Main()Flash的源码:packageimport flash.display.Sprite;import flash.external.ExternalInterface;import flash.system.Security;import flash.text.TextField;/* * Flash缓存造成的伪沙箱问题演示 * author qhwa */public class Main extends Spritepublic function Main():voidvar tf:TextField = new TextField();tf.text = flash ready;tf.autoSize = left;addChild(tf);/允许被所有其他沙箱中的js或flash调用Security.allowDomain(*);start();private function start():void/在基于IE的多标签浏览器中,这里运行时可能出错ExternalInterface.call(alert, Hi, flash is ready!);ExternalInterface.addCallback(drawCircle, drawCircle);private function drawCircle():voidTextField(getChildAt(0).appendText(nDraw a circle);graphics.beginFill(Math.random() * 0xFFFFFF, .5);graphics.drawCircle(Math.random() * stage.stageWidth,Math.random() * stage.stageHeight,50);graphics.endFill();似乎一旦swf是从缓存中读取的,allowScriptAccess这个配置就不起作用?为了验证是不是缓存引起的,我们每次为swf文件地址后面加上随机的数字,发现就不存在上面的问题了。可见这个问题确实是浏览器缓存造成的。为swf文件动态加时间戳或随机数,通过防止缓存可以回避掉这个问题。不过这不是一个很好的方案,因为这会极大增加服务器的压力,并且导致页面加载速度一直都很慢。不过好消息是,目前有个比这个更好的方案:延迟Flash的初始化功能。通过将Flash的ExternalInterface.addCallback时机延后一些,就可以解决这个问题。修改一下Flash的代码,加一个setTimeout:.(略)public class Main extends Spritepublic function Main():void.(略)/start();setTimeout(start, 500);.(略)测试修改后的效果那么,延迟多少比较合适呢?如果太多,用户会感觉到明显的延迟;太少,一些性能较差的电脑上问题依然存在。根据我一年多总结的经验,500ms是比较合理的数字。目前阿里巴巴中国网站上使用的Flash应用程序,如果有需要和js通信,都是延迟500ms初始化。顺便说一下,延迟500ms还有另外的一个作用。IE6中,Flash初始化的时候无法得到 stage.stag
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 妇科医疗安全与管理
- 安全给药管理制度
- 医药销售人员提成比例设计方案
- 压力容器制造企业电工日常检查安全操作规程
- 苏教版小学一年级语文下册《练习2》句子运用教案
- 过程安全管理
- 危险化学品使用单位驾驶员日常检查安全操作规程
- 2026年高级卫生专业技术资格考试(副高)老年医学(副高)试题及答案
- 模具试模调试作业指导书
- 如何做好设备安全管理
- 2026年度济南临港经济开发区管委会公开招聘工作人员(5人)笔试参考题库及答案详解
- 2026年低压电工证考试题库及解析答案
- 中国电池即服务(BaaS)行业决策建议及发展前景展望研究报告
- 2025-2026学年上海市静安区民立中学高一(上)期末数学试卷(含解析)
- 雨课堂在线学堂《创业管理四季歌:艺术思维与技术行动》单元考核测试答案
- YST 63.7-2024《铝用炭素材料检测方法 第7部分:表观密度的测定 尺寸法》
- CJJT146-2011 城镇燃气报警控制系统技术规程
- HG/T 3706-2024 工业用金属孔网管骨架聚乙烯复合管(正式版)
- 江苏南通艺术剧院招考聘用工作人员2人公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版
- 人力资源外包投标方案
- 《园林植物病虫害防治》课程标准
评论
0/150
提交评论