如何解决防止SWF调用外部接口调用而无需重新编译它
|| 我正在与无法更改的第三方瑞士法郎合作,并负责使其在本地环境中工作,并已在我构建的容器应用程序中加载。 SWF的发布是为了访问网络沙箱,因此,每当它在本地html容器中调用ExternalInterface时,都会引发安全沙箱错误并终止执行。 ExternalInterface调用都是非关键的(日志记录),因此,如果我可以某种方式阻止它们,那么我将不再有问题。 我可以肯定这是不可能的,但是我希望这里的人可以证明这一点。解决方法
我认为这是不可能的(或者至少它不是微不足道的)。我曾经在AS 2.0项目中使用动作脚本汇编程序/反汇编程序FLASM做过类似的事情(只是删除了几个调用)。但是此工具仅适用于AS 2.0,并且我不知道其他适用于AS 3.0的类似工具(尽管可能存在某些类似工具)。
但是,也许您可以设置一个本地Web服务器,它非常简单(在Windows上为WAMP,XAMP等),并以
http://localhost/myApp/index.html
运行html,而不是直接从文件系统运行它。在这种情况下,这可能是一个简单的解决方法。
,我可能会丢失一些东西,但是外部接口主要用于在SWF的父级中调用javascript。
引发的安全错误应表明它试图调用的内容。在封装SWF的HTML中,您要做的就是提供SWF尝试调用的方法。
因此SWF可能有ExternalInterface.call(\"js_function\");
,所以在您的包装中有
<script>
function js_function() { // do nothing }
</script>
,Hacky真是可恶,但是您可以在父应用程序中编辑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.\");
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。