개발/Flex

웹페이지가 로드된 후 flex의 ActionScript 함수 실행 시키기

리미르체르 2010. 8. 2. 11:41
웹페이지가 나타나면 자동으로 flex의 함수를 호출해야하는 경우가 생겼다.
그래서 아래와 같이 페이지를 만들었다.

HTML
<head>
	function callFlashFunction()
	{
		flashMovie.callJavaScriptToActionScript( 'i am here' );
	}
</head>
<body onload='javascript:callFlexFunction()'>
	<!-- flex -->
	<object id='flexMovie'>
		<param name="allowScriptAccess" value="always" />
		<embed name='flexMovie' 
			allowScriptAccess="always" />
	</object>
</body>

하지만 기대하던 대로 동작하지 않았다.
4 번째 줄에서 flexMovie를 인지하지 못하는 것이었다.
아직 flex가 올라오기 이전에 함수가 먼저 호출되기 때문이었다.

그래서 flex에서 자신이 로드되면 JavaScript를 호출하는 방식으로 수정하였다.






변경된 HTML
<head>
	function callFlashFunction()
	{
		flashMovie.callJavaScriptToActionScript( 'i am here' );
	}
</head>
<body>
	<!-- flex -->
	<object id='flexMovie'>
		<param name="allowScriptAccess" value="always" />
		<embed name='flexMovie' 
			allowScriptAccess="always" />
	</object>

FLEX code 일부
private function onCreationComplete()
{
	if ( ExternalInterface.available )
	{
		ExternalInterface.call( "callFlashFunction" );
	}
	else
	{
		throw new Error( "Can't use ExternalInterface" );
	}
}

HTML에서 flex movie를 로드하면
flex에서 FlexEvent.CREATION_COMPLTETE 가 발생할 경우
5번째 줄에서 처럼 HTML 페이지의 JavaScript를 호출합니다.





검색의 바다에서 얻은 정보
- embed에나 object에 onload를 붙이고 싶었다.
>>> body 에만 onload 가 붙는다.

궁금한 부분
- javascript를 넣는 위치 변경으로 동작하지 않을까? ( flexMovie를 javascript가 인식하지 않을까? )
:: body 안쪽 flex movie 뒤쪽 
> 하지만 안될것같다. 왜냐하면 body에서 javascript를 호출하니까?







자바스크립트에 대한 이해부족
HTML 에 대한 이해부족