Flash에서 페이지 내에 있는 javascript 함수를 호출 하려고 ExternalInterface.call 을 사용하는데, 간혹 스크립트 오류가 발생 해서 엄청 애를 먹었다.


결론부터 말하자면...


단순한 javascript 오류겠거니 하고 디버깅을 위해 오류 정보를 보는데...

"줄: 1"
 
단순한 javascript 오류가 아닌게다.

일단 Action Script 문제인지 아니면 다른 문제인지 판단하기 위해 해당 플래시만 있는 페이지를 만들고 단위 테스트를 해봤다.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />	<title>테스트</title>	<script type="text/javascript">		function callTest(msg) {			alert(msg);		}	</script></head><body><div><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="100%" height="500" id="CallTest" align="middle">	<param name="allowScriptAccess" value="sameDomain" />	<param name="allowFullScreen" value="false" />	<param name="movie" value="ScriptError01.swf" />	<param name="quality" value="high" />	<param name="salign" value="t" />	<param name="wmode" value="transparent" />	<param name="bgcolor" value="#ffffff" />		<embed src="ScriptError01.swf" quality="high" salign="t" wmode="transparent" bgcolor="#ffffff" width="975" height="500" name="CallTest" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" /></object></div></body></html>

그런데 이 코드는 오류 없이 잘만 작동한다. 그렇다면 HTML 코드상의 문제일텐데... 이리 저리 만지작 거리다 한가지 단서를 발견했다. 플래시 object의 id를 변경하니 오류가 발생하지 않는 것이다.

문제의 원인은 id값이 중복으로 사용되었던 것이다. 오류가 발생 했던 코드는 다음과 같다.
>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />	<title>테스트</title>	<script type="text/javascript">		function callTest(msg) {			alert(msg);		}	</script></head><body><div id="gnb"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="100%" height="500" id="gnb" align="middle">	<param name="allowScriptAccess" value="sameDomain" />	<param name="allowFullScreen" value="false" />	<param name="movie" value="ScriptError01.swf" />	<param name="quality" value="high" />	<param name="salign" value="t" />	<param name="wmode" value="transparent" />	<param name="bgcolor" value="#ffffff" />		<embed src="ScriptError01.swf" quality="high" salign="t" wmode="transparent" bgcolor="#ffffff" width="975" height="500" name="gnb" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" /></object></div></body></html>

위 코드를 잘 보면 플래시를 감싸고 있는 div 요소의 id 값이 "gnb"고 object 요소의 id도 "gnb"로 되어 있음을 확인 할 수 있다. 아마도 Action Script 3.0에서는 엄격한 문법 구조를 지향하고, 외부 통신을 위해 플래시 컨테이너의 독립성을 명확하게 하기 위함이 아닐까 하는 추측을 해볼 수 있다.

...라고 생각하기엔... 타 브라우저에서는 또 잘 돌아간다~ 유독 IE에서만...ㅠㅠ;;;

저작자 표시 비영리 동일 조건 변경 허락
Posted by 말 없는 수다쟁이 우드너
이전버튼 1 2 3 4 5 6 ... 15 이전버튼