比如我用 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里面的函数了