我正在使用第三方swf,我无法更改,并负责让它在本地环境中工作,加载到我构建的容器应用程序中。发布SWF是为了访问网络沙箱,因此每当它在本地html容器中调用ExternalInterface时,它都会抛出安全沙箱错误并导致执行死亡。 ExternalInterface调用都是非关键的(日志记录),所以如果我能以某种方式阻止它们,那么我将不再有问题。
我很确定这是不可能的,但我希望这里有人可以证明不是。
答案 0 :(得分:0)
我不认为这是可能的(或者至少它不是微不足道的)。我曾经使用FLASM,一个动作脚本汇编程序/反汇编程序在AS 2.0项目中做了类似的事情(只是删除了几个调用)。但是这个工具只适用于AS 2.0,我不知道AS 3.0的其他类似工具(虽然有些可能存在)。
但是,也许您可以设置一个本地Web服务器,这很简单(Windows上的WAMP,XAMP等)并将您的html运行为http://localhost/myApp/index.html
,而不是直接从文件系统运行它。在这种情况下,这可能是一个简单的解决方法。
答案 1 :(得分:0)
我可能会遗漏一些内容,但外部接口主要用于在SWF的父级中调用javascript。
抛出的安全错误应该表明它试图调用的内容。在包装SWF的HTML中,您只需提供SWF尝试调用的方法。
所以SWF可能有ExternalInterface.call("js_function");
,因此你的包装器中有
<script>
function js_function() { // do nothing }
</script>
答案 2 :(得分:0)
Hacky as hell,但你可以在你的父应用程序中编辑ExternalInterface类的.prototype,用你自己选择的函数替换“call”。我没有测试过这个,它只是一个理论,但它看起来像这样:
// in your main application's wrapper, before you load in the .swf you're working with
ExternalInterface.prototype.call = function(value:String):void {
trace("You just tried to call a js function called '" + value + "', but I intercepted it.");
}