我用的是swfobject + jquery来实现js和as3的交互,已经设置了allowScriptAccess 属性为always,但是flash中还是提示SecurityError: Error #2060....我很郁闷.....本人刚开始研究这东西....希望各位高人为小弟指点一下....不胜感激!
页面代码-------------------------------------------------------------------------
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" language="javascript" src="jquery-1.3.1.js"></script>
<script type="text/javascript" language="javascript" src="jquery.swfobject.js"></script>
<title>ExternalInterfaceExample</title>
<script language="JavaScript">
var jsReady = false;
function isReady() {
    return jsReady;
}
window.onload = function(){jsReady = true;}
 </script>
</head>
<body>
<div id="externalSWF"></div>
<script type="text/javascript" language="javascript">
$(document).ready(function(){
  $('#externalSWF').flash({
  swf: 'chatTest.swf',
  width: 800,
height: 400,
  params: {
  play: true,
wmode: "transparent",
allowScriptAccess: "always"
}
  });
});
</script>
</body>
</html>
AS代码-------------------------------------------------------------------------
import flash.external.ExternalInterface;setTimeout(checkJS,100);
incomingChat_txt.text+="initializing...\n";function checkJS(){
incomingChat_txt.text+="checkJS...\n";
if(checkJS_Ready()){
incomingChat_txt.text="Javascript Ready!";
}else{
incomingChat_txt.text+="Not Ready\n";
setTimeout(checkJS,100);
}
}function checkJS_Ready(){
incomingChat_txt.text+="checkJS_Ready...\n";
incomingChat_txt.text+=ExternalInterface.available+"\n";
if(ExternalInterface.available){
incomingChat_txt.text+="ExternalInterface.call before...\n";
try {
         ExternalInterface.call("isReady");
        } catch(e:Error) {
         incomingChat_txt.text+=e;
        }
var b:Boolean=ExternalInterface.call("isReady");
incomingChat_txt.text+="ExternalInterface.call after...\n";
return b;
}else{
incomingChat_txt.text+="ExternalInterface is not available.\n";
}
}
显示结果-------------------------------------------------------------------------
initializing...
checkJS...
checkJS_Ready...
true
ExternalInterface.call before...
SecurityError: Error #2060

解决方案 »

  1.   

    希望下面的文章可以帮到你http://www.scriptlover.com/post/471
      

  2.   


    as 3 与javascript 安全机制var readyTimer;
    function registerJsFun() {
    if (ExternalInterface.available) {
    try {
    var containerReady:Boolean = isContainerReady();
    if (containerReady) {
    setupCallBacks();
    } else {
    readyTimer = setInterval(timeHandler, 100);
    }
    } catch (error:Error) {
    trace(error);
    }
    } else {
    trace("External interface is not available for this container.");
    }
    }
    function timeHandler() {
    var isReady:Boolean = isContainerReady();
    if (isReady) {
                 //如果全部加载完,则删除循环事件,暴露方法
    setupCallBacks();
    clearInterval(readyTimer);
    }
    }
    //swf call js function
    function isContainerReady():Boolean {
    var _result:Boolean = Boolean(ExternalInterface.call("isReady"));
    return _result;
    }
    //暴露SWF方法
    function setupCallBacks() {
    ExternalInterface.call("setSwfIsReady");
    ExternalInterface.addCallback("connects",connects);
    ExternalInterface.addCallback("sendMessage",sendMessage);
    ExternalInterface.addCallback("sendSingleMessage",sendSingleMessage);
    }
    registerJsFun();
    var jsReady = false;
    //swf循环call此方法 直到范围true
    var isReady = function() {
        return jsReady ;
    }
    //swf 准备好 call js function 再连接swf方法
    var setSwfIsReady = function() {   
        $('#server').get(0).connects($.cookie('name'));//如何发生JS错误可以alert($('#server').get(0).connects)看是否是null
    }
    //window.onload function
    $(function(){
        jsReady = true;
    });
      

  3.   

    感谢xuyiazl的答复~但是还是不行~
    到了isContainerReady()方法里面的ExternalInterface.call("isReady")就不行了~
    try catch 一下还是SecurityError: Error #2060...