ExternalInterface vs getURL

오늘 퇴근길에 회사에서 전화가 오더군요..

"퇴근 하셨나요.. 이거 왜 이러나요?"

뭐 이런 내용이였는데 즉 플래시와 javascript 간의 통신상의 문제인듯 했다.

HTML 안의 Javascript 함수<script>
    function download(){
        top.location.href = "파일이 있는 주소.zip";
    }

    function hello(){
        alert("hello");
    }
</script>

Flash의 ActionScriptimport flash.external.*;

a_btn.onRelease = function(){
    ExternalInterface.call("download");
};

b_btn.onRelease = function(){
    getURL("javascript:alert('hello'))";                   // 방법 1
    getURL("javascript:hello()");                          // 방법 2
    ExternalInterface.call("hello");                       // 방법 3
};

위 두 코드의 관계를 파악하면 금방 아실 수 있을 것이다.
플래시의 a_btn 버튼을 클릭하면 javascript의 download 를 호출하여 어떠한 파일의 다운로드를 시도할 것이고

b_btn 버튼을 클릭하면 방법 1~3 중 하나의 방법을 넣었다고 가정할 때, 브라우저상이 hello라고 찍힌 alert창을 띄우는 것이다.
b_btn 버튼상의 방법 1~3의 기능은 모두 동일하다.

나의 경우에는 js에 따로 함수를 만들어 쓰지 않아도 되기에 방법 1의 코드를 즐겨 사용하곤 하는데 이 방법을 씀으로 해서 문제가 발생한 듯 했다.

[이슈]
b_btn 버튼의 이벤트 핸들러에 방법 1 또는 방법 2를 사용 했을 때 이슈 발생
  1. b_btn을 클릭하면 "hello"라고 찍힌 alert 창이 나타난다.
  2. a_btn을 클릭하여 임의의 파일을 다운로드를 시도한다.(승인을 하든, 취소를 하든 중요치 않다. 다운로드 시도를 하는것이 중요하다)
  3. 다시 b_btn을 클릭하면 "을 다운로드 할 수 없습니다. 지정되지 않은 오류입니다" 라는 경고창이 발생한다.
정말 예상치 못한 문제 발생이였다.
집에와서 테스트 해 본 결과 방법 3으로 하면 아무런 문제가 발생하지 않지만 원인 파악이 안된다.
ExternalInterface와 getURL을 혼용함으로서 일어난 문제일까?

암튼 출근하자 마자 저 부분부터 수정해야겠다.
현재 저런 문제를 안고 있는 상태로 오픈 중이다..
조금만 더 일찍 연락이 왔더라면.. 버스가 회사앞을 떠나자마자 전화가 왔으니 말이죠.

어째뜬 이 일로 느낀전...
js 함수 만들기 쬐금 귀찮더라도 ExternalInterface로 무조건 올인.
AS3.0에선 getURL은 사라졌는데 슬슬 getURL 함수와의 이별연습을 해야지..

by 꼬출든남자 | 2007/07/05 01:36 | Flash | 트랙백 | 덧글(2)

트랙백 주소 : http://orochi77.egloos.com/tb/1315680
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 박은혜 at 2008/06/05 15:24
js함수파일을 txt파일로 만들 수 도있나여???
현재 텍스트파일로 연동되어 getURL로 링크된걸 ExternalInterface로 바꿔야하는데
꼭js함수파일로만 만들어야하는지...
Commented by 꼬출든남자 at 2008/06/06 02:42
js함수는 별도의 js파일안에 작성하여 html페이지에서 그 js파일을 인크루드하여 사용할 수 있구요.
아니면 html 의 <script/> 태그 내에 직접 js 함수를 작성하셔도 됩니다.

:         :

:

비공개 덧글

◀ 이전 페이지다음 페이지 ▶