지금까지 Flash Lite 3.1 기반으로 Stand Alone 프로그램만 보다가 업무상 브라우져에서 swf를 불러서 변수 전달 및 함수 호출을 해야 할 일이 생겼다. 이전에 Flash Lite 3.1 에서 파라미터 전달하는걸 며칠간 시도하다가 포기했던 안좋은 기억이 있어서 선뜻 손은 안가지만.... 그래도 하라니 찾아봐야 -_-;;;
관련 자료를 열심히 검색해보니 나오는건 몇개 있는데 거의가 다 비슷한 소스를 비슷하게 수정하거나 한 것들이다. 중요한건 옛날꺼라서 링크도 깨진게 많고 정확한 첨부된 소스가 없다;;;; 몇시간 삽질한 끝에 성공.
첨부된 파일을 풀어보면 html, fla, swf 이렇게 3개가 있는데 swf는 fla로 만든 실행파일이고 html을 열어서 버튼늘 눌러보면 된다.
#1 버튼 클릭 전
#2 버튼 클릭 후
※ 소스코드
<!-- JsToFlash.html -->
<!-- Environment : Action Script 2.0 -->
<HTML>
<HEAD>
<meta http-equiv=Content-Type content="text/html; charset=">
<SCRIPT LANGUAGE="JavaScript">
function SetFlashVariable() {
var movie = window.document.JsToFlash;
movie.SetVariable("inputTextA", form1.inputVal.value);
movie.SetVariable("inputTextB", "B text hard coding");
}
//-->
</SCRIPT>
</HEAD>
<BODY>
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" WIDTH="300" HEIGHT="200" id="JsToFlash" ALIGN="">
<PARAM NAME=movie VALUE="JsToFlash.swf">
<EMBED autostart="true" src="JsToFlash.swf" WIDTH="300" HEIGHT="200" name="JsToFlash" ALIGN=""></EMBED>
</OBJECT>
<br><br>
<form id="form1"><input name="inputVal" type="input" value="input here"><br />
<input type="button" value="set to flash" onClick= SetFlashVariable();>
</form>
</BODY>
</HTML>
// JsToFlash.fla 의 액션스크립트 부분
// Dynamic Text 속성을 가진 inputTexta, inputTextb, inputTextCheck 텍스트가 그려져있어야 한다(첨부파일 참고)
/*
Action Script 2.0
자바스크립트로부터 변수를 전달 받아서 특정 함수를 호출하는 예제
*/
// 사용자 정의 함수
function runActionA(arg){
inputTexta.text = arg;
inputTextCheck.text = "Yes";
}
// 사용자 정의 함수
function runActionB(arg){
b(arg);
}
// 사용자 정의 함수
function b(arg){
inputTextb.text = arg;
}
_root.addProperty("inputTextA", function(){}, runActionA); // 자바스크립트로부터 inputTextA 라는 인자를 받게되면 runActionA 함수를 실행한다.
_root.addProperty("inputTextB", function(){}, runActionB); // 자바스크립트로부터 inputTextB 라는 인자를 받게되면 runActionB 함수를 실행한다.
덤으로 이 테스트를 할 때의 환경은
이클립스의 플러그인으로 톰캣 6.0 실행
html은 이클립스에서 편집
플래시는 Adobe Flash CS4
이렇게 사용을 했다.
swf가 변경되어도 웹페이지에서 해당 swf가 변경된 것을 인식하지 못하는 문제가 있는데 이 때는
이클립스에서 해당 html(또는 jsp)가 들어있는 프로젝트를 새로고침(F5) 해주면 톰캣이 재시작 되면서 변경된 swf가 반영이 된다.
이거 알아내는데 2시간 걸렸다 -_-+