比如我用 a.swf 加载 b.swf
b.swf里面调用了ExternalInterface.call("alert","haha");
这样每次在网页上运行含a.swf的页面的时候,都会弹出来haha的对话框
为了不弹出这个框,但是又不能修改b.swf的情况下,
能通过修改a.swf中的代码屏蔽这个ExternalInterface.call么?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
曲线救国:
方案一:
通过html页面设置allowScriptAccess和allowNetworking两个参数调整swf权限,禁止ExternalInterface.call以及其它与浏览器有关脚本
方案二:
如果flash调用的ExternalInterface.call成功,则会在页面生成四个js函数,判断这些函数,如果存在,则覆盖
前面两个方案要求有修改页面的权限,下面第三方案可以不用改页面,但是很繁琐,基本上算是flash注入替换了
方案三:
利用 as3swf https://github.com/claus/as3swf/
先用 URLLoader 將 b.swf 資料載入
然後用 as3swf 反編譯 b.swf
找出並替除 ExternalInterface 呼叫
重新編譯 b.swf 載入 Loader
方案四:
设置allowCodeImport属性,帮助文档上说是fp10.1以后才支持这个功能
该属性指定是否可以使用Loader对象将包含可执行代码的内容(swf)导入到调用
方安全沙箱。air中该属性默认为false,fp中为true。
方案五:
让a.swf和b.swf处在不同域下,这样默认双方都不能读写对方的函数,所以自然屏蔽b.swf里面的函数了