swf 파일의 파라미터로 변수를 전달할 때의 문제점에 대한 리포트
문제점
HTML에서 플래시를 화면에 넣기 위해 쓰이는 일련의 태그들 <embed>
라던가 <object>
에서 SWF 파일명 뒤에 파라미터를 붙이는 방식으로 플래시에 변수를 넘기고 이것을 이용해 처리를 할 때의 문제점.
<embed.... (생략)... FILE_NAME.swf?변수명=변수값>
의 구조에서 이 변수값 부분을 프로그램에서 처리해주거나 어떠한 계산에 따라 써줄 때 플래시로 제대로 변수가 들어가지 않는 문제점이 있었다.
클라이언트(=웹브라우저)의 요청에 따라 HTML이 전달되어 화면에 써지게 되는데 이 순간에 SWF를 표시해주라는 것 역시 써지게 된다. 하지만 변수값은 프로그래밍 되어서 처리되기 때문에 속도가 더 느렸다.
프로그래밍되어서 전달되는 변수가 비어있기 때문에 플래시로 이런 변수를 전달 받으려하면 ‘undefined’ 값으로 들어오게 된다.
특히 메뉴 네비게이션에서 활성화에 관한 변수를 받을 때 이런 식의 파라미터를 이용한 변수 받기가 많았기 때문에 많이 겪게 되는 문제였고 swf 파일 안에 처리속도가 느리게 되는 요소(예를 들면, 대형 이미지로 작동하는 모션 같은)가 있는 경우에는 더욱 더 이 문제가 많이 생겼었다.
해결방법
swf의 1프레임에서 parameter 값을 확인하도록 하는 절차를 밟게 해서 이 문제를 해결 할 수 있었다.
ActionScript 1.0/2.0에서는 단순히 _root.변수명
값이 undefined
가 아닐 때를 onEnterFrame
이나 watch
를 통해서 if문으로 검사하고 변수가 undefined
가 아닐 때 2프레임으로 넘어가서 처리를 시작하는 방법으로 해결이 가능. 물론, 이 때 실제 변수를 가지고 처리하는 부분은 2프레임부터 시작하도록 만들어야함.
ActionScript 3.0에서는 LoaderInfo
클래스를 이용해서 역시 파라미터 값을 확인하고 Event.ENTER_FRAME
을 이용하거나 이벤트리스너를 연결해서 watch를 하는 방법을 이용하면 된다.
자바스크립트로 변수를 전달하는 경우에는 대부분 이상 없었으나(아마 자바스크립트의 처리속도가 HTML을 쓰는 속도만큼 꽤 빠르기 때문이 아닐까…) 지금 일하다가 흔히 마주치는 JSP 파일의 경우에는 간혹 이러한 문제 때문에 변수가 제대로 받아지지 않고 그로 인해 무한루프에 빠지게 되는 현상들이 있었다.