我用的是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
页面代码-------------------------------------------------------------------------
<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
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;
});
到了isContainerReady()方法里面的ExternalInterface.call("isReady")就不行了~
try catch 一下还是SecurityError: Error #2060...