工作需要,软件内嵌入了一个html,html里有一个flash,遇到一个悲剧的问题。 actionscript与外部的javascript,需要用到ExternalInterface来调用js函数,但是,这必须在一个域名下进行,否则会进入安全沙箱机制。比如本地运行一个html,as里调用js函数就会失败,因为进入沙箱安全机制了.....请问高手,怎么去突破这个沙箱。 (类似调低flash安全设置等不能算)。我想到了几个比较折衷的办法:1:用socket模拟一个httpserver.2:改写webkit小弟菜鸟,只想到了这2个,第一个我已经在实验中。。请大家发挥想象力,看有什么最有效的方法来突破这个安全机制。

解决方案 »

  1.   

    FABridge即可完成,具体的你可以找找相关资料
      

  2.   

    你的socket 模拟 htppserver 什么意思?你把html,swf文件放服务器不就行了???
      

  3.   


    在一个本地html文件嵌入flash,没有服务器,如果有就不那么麻烦了。
      

  4.   


    大侠,失败了 flash.system.Security.allowDomain("*");
    ExternalInterface.call("showJsFun");失败了。。 js函数没有被调用。。一旦放进一个服务器里就成功了 哎~ ~。
      

  5.   

    去下swfupload的源码来看一下,里边的提供了大量的js和as之间的调用。
      

  6.   

    我看他那里的就是直接:
    ExternalInterface.call(callback);
    就行了的。当然,还要在as的主类中加:
    Security.allowDomain("*");要不,lz先确认一下js是否加载正确。
      

  7.   


    不是, 你没有明白我说的。 as与js通信已经清楚怎么去弄了,但是现在这个通信只能在一个域名下进行,如果在本地进行会被沙箱的安全机制过滤掉,那个代码都正确的,我放到一个服务器上就能执行,但是本地就不行。现在是想一个办法能突破这个沙箱。
      

  8.   

    我用flash-socket时也遇到了. 
    解决的方法lz你没提到, 就是服务器主动写策略文件回来.我用的flash的socket, 每当连接(即connect时), 服务端(php)判断 if(strpos($buf, 'policy-file-request')){
    $msg = "<cross-domain-policy><allow-access-from domain='*' to-ports='*' /></cross-domain-policy>";
    socket_write($clientSock, $msg."\0", strlen($msg."\0"));
    }即: 当flash请求policy-file-request时便将策略文件的内容直接返回我最近也在研究flash, 共勉
      

  9.   

    你不是说是软件上的东西???,,软件里 再加一个小型的服务器,只处理 html文件的服务器,当要打开html页面时,运行小型服务器程序绑定到随便一个端口就行了...Python的模块查看器就是这样做的你想在 flash里解决是不可能的
      

  10.   

    已经解决了。。哎~ 为了个flash 写了个http server。。 郁闷死。。回复11楼,我用的是c++,对php不了解阿,我只是监听本地的一个端口,然后返回http请求的数据。回复12楼,是的,软件里嵌入html。