출처: http://cafe.naver.com/flashdev.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=16969

안녕하세요?

FIrefox를 제외하고 플래시와 통신을 할때..(mx까지..) getVariable와 setVariable를 애용해왔는데요,

이게 Firefox에서는 통하지 않는다는걸 알았습니다..^^;;


그래서 Flash8을 설치한후에 ExternalInterface.addCallback를 이용해서 Flash와 Javascript의 통신을 해보려합니다.


일단 기본적으로.. Flash코드는,

this.GetLoaded = function() {
 return _root.Loaded;
}
//this.addProperty("LoadFlash", this.GetLoaded, null);
ExternalInterface.addCallback("LoadFlash", "", this.GetLoaded);


이런식입니다.. 주석처리한 부분은 이전에통신할때 쓰던 부분입니다..get/setVariable..


그리고, Javascript부분은

function showswf( id, swf, w, h ) {
 document.write( '<Object id="' + id + '" clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="' + w + '" height="' + h + '">' );
 document.write( ' <param name=movie value="' + swf + '" /' );
 document.write( ' <param name=quality value=high />' );
 document.write( '   <param name="' + "allowScriptAccess" + '" value="' + "always" + '" />' );
 document.write( '   <param name="' + "showLiveConnect" + '" value="' + "true" + '" />' );
 document.write( ' <embed src="' + swf +'" name"' + id + '" quality=high allowScriptAccess=always showLiveConnect=true pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="' + w + '" height="' + h + '"></embed> ' );
 document.write( '</object>' );
}

입니다..


문제는 여기서부터 입니다.

이렇게 했을때, showswf를 호출해주고나서,

function getMovieName(movieName) {
  if (navigator.appName.indexOf("Microsoft") != -1) {
   //return window[movieName]
   return document.getElementById(movieName)
    }
    else {
     //return document[movieName]
     return document.getElementByName(movieName)
    }
 }


var obj = getMovieName("menuFlash");
   

if (obj == null)  {
    alert("obj null");

   }

이부분에서 alert가 계속 뜹니다..

어떤 문제일까요? 이래저래 상황을 바꿔줘도.. 일단 플래시 개체를 찾지 못하니, 힘들군요 ^^;;

flash에서 ExternalInterface.call로 js함수를 호출한건 뜨는것을 확인했습니다.


ExportOption은 Flash8, ActionScript2.0, 입니다..

FlashPlayer 버전은 9.x입니다..


///////////////////////////////////////////////////////////////
답글

howswf 안에서 classid= 이부분이 빠진듯 싶습니다
그리고 getElementByName 대신 getElementsByName 함 써보세요
후자가 더 범용적인지는 확실치 않습니다만 IE6, firefox2.0 에서 잘되는듯 싶네요

백탄왕 도움 감사합니다.. 이상하게 getElementByUd나 Name을 쓰면.. 개체를 찾지를 못하네요..

한상훈 GetVariable(대소문자 주의) IE, 파폭 다 잘 됩니다.
단, IE일 경우에는 <object id=flash>로
파폭의 경우 <embed name=flash>로 통신해야 합니다.

한상훈 또 <object id=flash name=flash><embed name=flash> 처럼 코딩이 된경우
파폭 사용시 자바스크립트에서 embed 태그를 제대로 찾지 못하기 때문에 코딩에 주의가 필요합니다.

백탄왕 한상훈님, 답변 감사합니다. Get/Set메소드는..
this.addProperty("MainMenu_Add", this.GetMainMenu, this.SetMainMenu);
이런 방식으로 사용했엇는데, 잘 통하지 않더군요, FF쪽에서.. 여기저기 찾아도 안되길래..
ExternalInterface를 활용하려고 하고 있습니다..
답변 참고하겠습니다. 감사합니다..

민수 파폭에선 setVariable 이 아니라 SetVariable이라고 대소문자 구분해줘야되던가 그럴겁니다.

AND