ExternalInterface와 javascript에서 생기는 오류
페이지 정보
작성자 서방님 댓글 0건 조회 130회 작성일 09-02-26 17:40본문
1. 플렉스에서 자바스크립트로 call을 못한다거나 addCallback을 받을수 없을 경우 도메인이 틀린지 먼저 확인한 후 script에서 플렉스를 로딩하는 스크립트 에서 param태그에 allowScriptAccess 부분과 object에 allowScriptAccess 부분을 항상 써 주어야 한다. 주의.
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<title> new d0cument </title><script type="text/javascript">
function call(){
eval("flexid").javascriptToCall();//or d0cument.getElementById("flexid").javascriptToCall()
}
function flexWrite(url,id,vars,bg,win){vars = "FLEX_ID=" + id + "&" + vars;
var flashStr=
"<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0'allowScriptAccess='always' width='100%' id='"+id+"' align='middle'>" +
"<param name='flashvars' value='"+vars+"' />" +
"<param name='movie' value='"+url+"' />" +
"<param name='wmode' value='"+win+"' />" + //window, opaque, transparent 세가지 종류
"<param name='menu' value='false' />" +
"<param name='quality' value='high' />" +
"<param name='bgcolor' value='"+bg+"' />" +
"<param name='allowScriptAccess' value='always' /> "+ //jsp와 플렉스있는 도메인이 틀린경우 반드시 이 문잘을 alyways로 해 주어야 플렉스와 자바스크립트 접근이 가능하다.
"</object>";d0cument.write(flashStr);
}
</script>
</head>
<body><input type="button" label="플렉스Call" onClick="call()"/>
<script>
flexWrite("flexTest.swf", "flexid", "", "#FFFFFF", "window");
</script>
</body>
</html>
2. 플렉스 로딩부분이 Form안에 들어 가 있을 경우 위의 소스 중 d0cument.write(flashStr) 밑에
d0cument.write(flashStr);
//Flash의 ExternalInterface가 Form Tag내에서 오류나는 버그를 해결하는 코드
eval("window." + id + " = d0cument.getElementById('" + id + "');");
3. FireFox에서 Object와 Embed에 id가 동시에 있을 경우 FireFox 접근이 되지 않는다. IE는 동시에 적어주어도 되지만 FireFox에서는 접근이 되지 않으므로 Embed에서는 빼주어야 한다.
4. 자바스크립트에서 플렉스로 Call할 경우 Flex 에서는 도메인이 틀릴경우 Security.allowDomain("*") 반드시 사용해야 하며 *대신에 도메인으로 사용해도 된다.
<?xml version="1.0" encoding="euc-kr"?>
<mx:Application xmlns:mx="http...." creationComplete="initApp()" >
<mx:Script>
public function initApp():void{
Security.allowDomain("*");
Security.allowInsecureDomain("*");
System.useCodePage = true;
ExternalInterface.addCallBack("javascriptToCall", callFun);}
private function callFun():void{
Alert.show("자바스크립트에서 플렉스로 Call했음");
}
</mx:Script>
</mx:Application>
5. 4번과 같은 경우 대부분이 해결이 되지만 Application 와 Module간의 문제가 이슈가 될 수도 있다. 플렉스 3에서는 테스트해보지는 않았지만 플렉스2에서는 각각의 따로 Security.allowDomain("*"); 이 부분이 Module상에 존재 해야지만 접근이 가능하다. 접근이 불가능할경우 자바스크립트 오류로는 '지정되지 않은오류입니다.'라는 메세지가 뜬다.
첨부파일
- dhtml_menu.html (6.0K) 0회 다운로드 | DATE : 2009-02-09 13:21:09
댓글목록
등록된 댓글이 없습니다.