=================================
=================================
=================================
출처는 플생사모까페의 우야꼬님..
망할 파일 첨부도 되질 않는다. ㅠㅡㅠ
=================================
=================================
=================================
안녕하세요
밥먹구 왔습니다 -0-;;
파란토끼님의 기대에 부응하기 위해
addCallback 사용법에 대해서 강좌 들어갑니다.
.call 이 플래시가 자바스크립트를 가지고 노는거라면
.addCallback 은 자바가 플래시를 가지고 노는거라고 보시면 됩니다.
플래시 내부의 함수를 바깥에서 접속할수 있도록 registry(F1 Help 는 register 라는 단어를 사용했습니다. 아마도 메모리에 저장시키기 때문이겠죠?) 시켜서 자바스크립트가 직접 컨트롤 할 수 있도록 해놓는것입니다.
간단한 기본 문구 부터 살펴보고 가죠.
ExternalInterface.addCallback("자바가 쓸 함수명", 인스턴스, 메소드명);
입니다.
예를 들어
ExternalInterface.addCallback("EI_fnc", "", swf_fnc);
라는 문장은 swf_fnc 라고 선언된 플래시내의 함수를
자바스크립트가 EI_fnc 라는 함수명으로 컨트롤 할 수 있다는 것이지요.
자 예제는 이렇습니다.
플래시내에서 moveMC(xy, num) 이라는 함수가 있습니다.
방향과 움직일 거리를 입력받아 무비클립을 이동시키는 함수입니다.
이 함수를 바깥으로 열어놓아서 자바스크립트가 onClick="moveMC(x, 10)" 이라는 형태로 직접 조정할 수 있도록 하는것입니다.
// 플래시 파트
import flash.external.ExternalInterface;
var successEI = ExternalInterface.addCallback("moveMC", "", moveMC);
if(!successEI){getURL("javascript:alert('Fail');"); }
goX = mc._x;
goY = mc._y;
function moveMC(xy, num){
if(xy == "x"){
goX += num;
}else{
goY += num;
}
}
mc.onEnterFrame = function(){
this._x += 0.3*(_root.goX - this._x);
this._y += 0.3*(_root.goY - this._y);
}
// Javascript 파트
<script language="javascript">
function mc_move(send_xy, send_num){
thisMovie("EI_flash").moveMC(send_xy, send_num);
}
function thisMovie(movieName) {
if (navigator.appName.indexOf("Microsoft") != -1) {
return window[movieName]
}
else {
return document[movieName]
}
}
</script>
// Embed 파트
id="EI_flash">
<param name="movie" value="externalinterface.addCallback.swf" />
<param name="quality" value="high" />
<param name="allowScriptAccess" value="always" />
allowScriptAccess="always" showLiveConnect="true" name="EI_flash"></embed>
</object>
자 하나씩 뜯어먹어보까요~
1. 플래시 파트
굳이 깊이 설명안드리겠습니다.
import 부분이 이해안가시는 분들은 제가 아래 써놓은 call 오픈강좌를 참고해주셔요 [http://cafe.naver.com/flashdev/8089 ]
ExternalInterface.addCallback(methodName, "", method) 형태로 선언해놓았습니다.
successEI 는 함수가 제대로 addCallback 된것인지 확인해주는 예외처리구문입니다.
2. Javascript 파트
thisMovie("EI_flash").moveMC(send_xy, send_num);
이부분이 플래시를 컨트롤 해주는 부분입니다.
EI_flash 는 플래시 embed 부분과 object부분에 설정해놓은 플래시네임입니다.
moveMC 는 ExternalInterface.addCallback(methodName, "", method) 이부분에서 methodName 을 가리킵니다.
methodName 이 자바스크립트에서 컨트롤 하는 함수명이라고 설명드렸습니다.
3. Embed 파트
.call 사용법과 마찬가지로
<object ... id="EI_flash">
<embed ... allowScriptAccess="always" showLiveConnect="true" name="EI_flash">
와
<param name="allowScriptAccess" value="always" />
를 추가해줍니다.
실제 액션은 onClick="mc_move('x', 20)" 과 같이 자바스크립트함수를 가지고 컨트롤 하면 됩니다.
의외로 사용법이 쉽습니다.
처음에 알아내기에는 좀 시행착오가 많았지만
알아내고 나니 정말 사용법이 간단하군요.
fscommand 로 변수쪼개서 받던 시대는 이제 간듯 싶습니다^^
다들 홧팅!!
p.s) 사실 html 에 VB+ 코드가 들어간다는게 여간 찜찜한게 아니었습니다...
p.s2) 혹시 저랑 MFD 같이 공부하실분 ㅎㅎ 예전에 65점 맞고 낙방했습죠 -0-
[출처] 자바스크립트와 커플이 된 ExternalInterface.addCallback 사용법|작성자 미라클캣
=================================
=================================
=================================
출처: http://blog.naver.com/PostView.nhn?blogId=kwangnyoumi&logNo=10032924433
이건 플래시액션과 자바스크립트의 연결이기 때문에 html파일에서 가능하다. 그리고 로컬에서 안된다...ㅠㅠ //플래시 파일에 작성 import flash.external.*; //"ExternalInterface.addCallback"을 미리선언 var methodName:String = "goHome"; var instance:Object = null; var method:Function = goToAdobe; var wasSuccessful:Boolean = ExternalInterface.addCallback(methodName, instance, method); //텍스트필드 선언 var txtField:TextField = this.createTextField("txtField", this.getNextHighestDepth(), 0, 0, 200, 50); txtField.border = true; txtField.text = wasSuccessful.toString(); //실행될 함수 선언 function goToAdobe("변수") { txtField.text = "http://www.adobe.com"; getURL("http://www.adobe.com", "_self"); } //html 파일에 작성 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-kr" /> <title>Untitled Document</title> </head> <body> <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="550" height="400"id ="externalInterfaceExample" > <param name="movie" value="Untitled-1.swf"> <param name="quality" value="high"> <embed src="Untitled-1.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="550" height="400"></embed> </object> <form> <input type="button" onclick="callExternalInterface()" value="Call ExternalInterface" /> </form> <script> function callExternalInterface() { thisMovie("externalInterfaceExample").goHome("변수"); } function thisMovie(movieName) { if (navigator.appName.indexOf("Microsoft") != -1) { return window[movieName] } else { return document[movieName] } } </script> </body> </html> [출처] ExternalInterface.addCallback 사용법(자바스크립트에서 플래시함수 실행)|작성자 허접강사 |
=================================
=================================
=================================
출처 : http://blog.ideatree.kr/50077233488
소스공개 - FLEX (플렉스) 에서 자바스크립트 (JAVASCRIPT) 호출하기 - ExternalInterface.addCallback 플렉스 2009/12/03 13:37 http://blog.ideatree.kr/50077233488 전용뷰어 보기 |
이렇게 간단한 걸... 쉽게 설명해 놓은 사이트가 없네요. (제가 이해력이 부족한 건가..ㅡㅜ)
암튼..저처럼 아무리 사이트를 뒤져도 이해가 되지 않는 분들을 위해 좀 쉽게 써보겠습니다.
요지는... Action Script 3.0 의 ExternalInterface 의 addCallback 메쏘드를 쓰는게 포인트 입니다.
addCallback 메쏘드는 두 개의 인자를 받는데요.
첫번째 인자 : 자바스크립트에서 사용할 이름 (매핑값)
두번째 인자 : 실제로 처리할 함수 포인터
첫번째인자는 두번째인자로 들어가는 메쏘드를
자바스크립트에서 호출하기 위해 사용되는 별명 같은 겁니다.
즉 .. MXML 에서 다음과 같이 선언했다고 하면,
ExternalInterface.addCallback( "test", myFunc ) ;
자바스크립에서
flexobj.test () ; 하고 명령을 주면,
AS3.0에서는 myFunc() 라는 메쏘드를 실행합니다.
[Sample]
[HTML 소스]
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<style>
body { margin: 0px; overflow:hidden }
</style>
<script type="text/javascript">
function CallAS() {
var fobj = document.getElementById ('adobeSimpleUpload3' ) ;
fobj.test () ;
}
</script>
</head>
<body>
<div>
<input type='button' value="TEST" onClick='javascript:CallAS();' />
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
id="adobeSimpleUpload3" width="395" height="75"
codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">
<param name="movie" value="adobeSimpleUpload3.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#869ca7" />
<param name="allowScriptAccess" value="sameDomain" />
<embed src="adobeSimpleUpload3.swf" quality="high" bgcolor="#869ca7"
width="395" height="75" name="adobeSimpleUpload3" align="middle"
play="true"
loop="false"
quality="high"
allowScriptAccess="sameDomain"
type="application/x-shockwave-flash"
pluginspage="http://www.adobe.com/go/getflashplayer">
</embed>
</object>
</div>
</body>
</html>
[MXML 소스]
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
backgroundGradientColors="[0xffffff,0xffffff]"
backgroundAlpha="1"
initialize="init()" width="395" height="75">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
/**/
private var _fr : FileReference ;
private var _status : uint ;
private var _uploadUrl : String ;
private var _uploadSizeLimit : uint ; // -- file size limit : 무조건 byte 단위
private function myFunc () : void {
clickSend () ;
}
private function init () : void {
ExternalInterface.addCallback( "test", myFunc ) ; // -- 첫번째 인자 : 자바스크립트에서 사용할 이름 (매핑값), 두번째 인자 : 실제로 처리할 함수 포인터
setStatus ( STATUS_WAIT ) ;
_uploadSizeLimit = UPLOAD_SIZE_LIMIT ;
_uploadUrl = "http://localhost:8080/jsp/test/upload.jsp" ;
_fr = new FileReference () ;
_fr.addEventListener( Event.SELECT, selectHandler ) ; // -- 2. 파일선택 시 발생
_fr.addEventListener( Event.OPEN, openHandler ) ; // -- 3. 업로드 시작 시 발생
_fr.addEventListener( ProgressEvent.PROGRESS, progressHandler ) ; // -- 4. 업로드 중 발생
_fr.addEventListener( Event.COMPLETE, completeHandler ) ; // -- 5.전송완료
}
/* EventHandler*/
private function selectHandler ( e : Event ) : void {
if ( ! checkSize ( _fr.size ) ) { return ; } // -- 허용용량 초과
this.txtFileName.text = _fr.name ;
setStatus ( STATUS_SELECTED ) ;
}
private function openHandler ( e : Event ) : void {
this.pgUpload.label = "Uploading %3%%" ;
setStatus ( STATUS_UPLOADING ) ;
}
private function progressHandler ( pe : ProgressEvent ) : void {
this.pgUpload.setProgress( pe.bytesLoaded, pe.bytesTotal ) ;
}
private function completeHandler ( e : Event ) : void {
this.pgUpload.label = "Complete" ;
setStatus ( STATUS_COMPLETED ) ;
}
/* Method */
private function clickFind () : void { // -- 1.파일찾아보기 버튼 누를때 이벤트
if ( ! canFind() ) return ; // -- 상태 확인
_fr.browse() ;
}
private function clickSend () : void {
if ( ! canSend() ) return ; // -- 상태 확인
var request : URLRequest = new URLRequest () ;
request.url = _uploadUrl ;
_fr.upload ( request ) ;
}
private function clickCancel () : void {
if ( ! canCancel() ) return ;
_fr.cancel() ;
setStatus ( STATUS_CANCELLED ) ;
}
/* setter */
private function setStatus ( status : uint ) : void {
_status = status ;
switch ( _status ) {
case STATUS_SELECTED :
this.btnCancel.visible = false ;
this.btnCancel.enabled = false ;
this.btnFind.visible = true ;
this.btnFind.enabled = true ;
this.btnSend.enabled = true ;
break ;
case STATUS_UPLOADING :
this.btnCancel.visible = true ;
this.btnCancel.enabled = true ;
this.btnFind.visible = false ;
this.btnFind.enabled = false ;
this.btnSend.enabled = false ;
break ;
default : // -- STATUS_WAIT, STATUS_CANCELLED, STATUS_COMPLETED
this.btnCancel.visible = false ;
this.btnCancel.enabled = false ;
this.btnFind.visible = true ;
this.btnFind.enabled = true ;
this.btnSend.enabled = false ;
break ;
}
}
/* checker */
private function canFind () : Boolean {
return ( _status != STATUS_UPLOADING ) ;
}
private function canSend () : Boolean {
return ( _status == STATUS_SELECTED ) ;
}
private function canCancel() : Boolean {
return ( _status == STATUS_UPLOADING ) ;
}
private function checkSize ( bytes : uint ) : Boolean {
return ( _uploadSizeLimit >= bytes ) ;
}
/* Constants */
// -- Status
private static const STATUS_WAIT : uint = 0 ; // -- 파일 고르기전 상태
private static const STATUS_SELECTED : uint = 1 ; // -- 파일 고른 상태
private static const STATUS_UPLOADING : uint = 2 ; // -- 파일 전송 상태
private static const STATUS_CANCELLED : uint = 3 ; // -- 파일 전송 취소
private static const STATUS_COMPLETED : uint = 4 ; // -- 파일 전송 완료
// -- Options
private static const UPLOAD_SIZE_LIMIT : uint = 10*1024*1024 ; // -- 업로드 사이즈 제한 : 10mb
/*etc*/
]]>
</mx:Script>
<mx:ProgressBar id="pgUpload" x="0" y="0" width="322" trackHeight="22" label="" mode="manual" />
<mx:Text id="txtFileName" x="4" y="2" selectable="false" text="Please select a file to upload ..."/>
<mx:Button x="324" y="0" label="찾아보기" id="btnFind" click="clickFind()" />
<mx:Button x="324" y="0" label="취소" width="70" id="btnCancel" enabled="false" visible="false" />
<mx:Button x="324" y="52" label="전송" width="70" id="btnSend" enabled="false" click="clickSend()" />
</mx:Application>
[출처] 소스공개 - FLEX (플렉스) 에서 자바스크립트 (JAVASCRIPT) 호출하기 - ExternalInterface.addCallback|작성자 넷플
=================================
=================================
=================================
출처: http://blog.naver.com/aleesejo?Redirect=Log&logNo=30041548841
전용뷰어 보기 |
플랙스를 작성하면 대부분은 웹 브라우져에서 동작을 하게 된다.
웹브라우져의 전체부분을 플랙스로 제작하는 경우가 아니라면 웹페이지와 플랙스간의 통신이 필요한 경우가 빈번하다.
이럴때 ExternalInterface 객체를 사용하여 자바스크립트와 액션스크립트간의 통신을 한다.
import flash.external.ExternalInterface;
를 통하여 ExternalInterface를 사용할 수 있도록 한다.
1. 액션 스크립트 -> javascript
call() 메소드 사용
ExternalInterface.call(FunctionName:String, param0,param1......)
Call 메소드로 실행된 스크립트는 비동기적으로 동작을 하기 떄문에 값을 리턴 하지 않는다.
자바 스크립트 프로토콜을 사용하여 동기적으로 자바스크립트 함수를 호출하기 위해서는 flash.net.URLRequest 객체를 사용하면 된다.
var request:URLRequest = new URLRequest("javascript:alert('example');");
navigateToURL(request);
2. javascript -> ActionScript
addCallback() 메소드를 사용하여 javascript에서 호출 가능한 메소드를 작성한다.
addCallback(JavaScriptCallFunctionName:String, functionName)//sdk 에 나오는 거랑은 다르게 파라메터 이름을 줘 봤다 ...
ExternalInterface.addCallback("MapExtentBoxDraw",MapExtentBoxDraw);
//위의 코드는 생성자에서 사용하고.
//아래의 함수를 설정한다.
private function MapExtentBoxDraw(xmin:int,ymin:int,xmax:int,ymax:int)
{
}
//자바스크립트에서는 다음과 같은 형태로 호출한다.
FlexObject.MapExtentBoxDraw(100,100,200,200); //FlexObject 는 Flex 객체.
너무 간단해서 쫌 허무하긴 한데.. 너무 필수적인 항목이라.. 적긴 해야 겠더라.. ㅡㅡ;
[출처] ExternalInterface 를 사용하여 Javascript와 ActionScript 통신하기.|작성자 자루
=================================
=================================
=================================
출처: http://ddongkang.tistory.com/86
Flash의 컴파일 결과물인 SWF는 그 자체로 UI 나 GAME 그리고 어플리케이션(AIR)이 될 수 있지만, 대부분은 브라우저에 Embeded 되어 사용됩니다. 배너와 같이 단순하게, 보여 주기 위해서 브라우저에 Embeded하는 경우도 있겠지만, UI 나 웹 어플리케이션을 구현할 때는 브라우져나, 서버사이드 언어와의 통신이 필요 하게 됩니다. AS3.0으로 거의 대부분의 Front-End 단의 개발작업을 모두 할 수 있긴 하지만, 퍼포먼스나 구현의 편의성을 위해 Javascript를 사용해야 하는 경우가 많습니다. 이 문서는 앞으로 몇개의 포스팅을 통해 다루게 될 AS3.0의 통신 방법에 대한 첫 문서로서 AS통신의 가장 기본이라 할 수 있는 브라우저와의 통신에 대해 다루고 있습니다.
SWF와 브라우저와 통신 하는 방법은 크게 두가지로 구분할 수 있습니다.
첫번째, SWF 를 브라우저에 Embeded 시킬때 변수를 전달해 주는 방법
아래와 같이 main.swf 파일을 브라우저에 Embeded할때 "FlashVars" 변수를 SWF에서 접근 하는 방식입니다.
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
id="FlashVar" width="500" height="375"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">
<param name="movie" value="FlashVar.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#869ca7" />
<param name="allowScriptAccess" value="sameDomain" />
<param name="FlashVars" value="data0=DongHyuk&data1=동혁&data2=http:www.ddongkang.com" />
<embed src="FlashVar.swf" quality="high" bgcolor="#869ca7"
width="500" height="375" name="FlashVar" align="middle"
play="true" loop="false" quality="high" allowScriptAccess="sameDomain"
type="application/x-shockwave-flash"
FlashVars="data0=DongHyuk&data1=동혁&data2=http:www.ddongkang.com"
pluginspage="http://www.macromedia.com/go/getflashplayer">
</embed>
</object>
object 와 embed 를 함께 사용해야 하는 이유
마이크로소프트의 Internet Explore(IE) 에서는 특정한 속성과 함께 <object>를 사용해야 하고, IE 외의 다른 브라우져에서는 이와 다른 속성을 설정한 <object>태그를 사용하거나, 아예 <embed>태그를 사용해야 하기 때문입니다. 모든 브라우저에서 크로스 브라우징을 하기 위함입니다.
object 태그를 사용하여 SWF 를 브라우져에 올릴때, FlashVars 값을 지정해서 넘겨 주는 방식 입니다. 위의 코드에서 볼드로 처리해 놓은 부분을 주의 깊게 보면, 두 부분에서 정의 하고 있는 변수들이 (data0,data1,data2)과 그 값들이 똑같아야 정상적으로 SWF에 넘어가게 됩니다.
AS3.0에서 FlashVars 변수를 통해 넘어 오는 값을 받는 방법은 다음과 같습니다.
package { import flash.display.LoaderInfo; import flash.display.Sprite; import flash.text.TextField; public class FlashVarsExample extends Sprite { private var field:TextField; public function FlashVarsExample() { field = new TextField(); field.autoSize = "left"; addChild(field); var keyStr:String; var valueStr:String; var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters; for (keyStr in paramObj) { valueStr = String(paramObj[keyStr]); field.appendText("\t" + keyStr + ":\t" + valueStr + "\n"); } } } }
LoaderInfo(this.root.loaderInfo).parameters 는 위의 object 태그에서 넘겨 주는 FlashVars를 받아 오고 paramObj를 for..in 구문을 사용하여 그 안에 있는 변수들을 뽑아 오는 방법 입니다. SWF 가 브라우저 또는 다른 SWF에 로드 되었을때, 자신의 로드 정보를 LoaderInfo 객체에 담고 있기 때문에 사용할 수 있는 방법 입니다. 자세한건 LoaderInfo 클래스를 참고 하세요.
플래시에서 로드 하는 xml의 url이 유동적으로 바뀌거나, 상황에 따라 다른변수를 SWF에 전달해 주고 싶을때 간단하게 사용할 수 있는 방법 입니다. 예를들어 브라우저의 현재 위치를 SWF에 전달하여 네비게이션 Depth를 구현 하는 것도 이 방법을 사용하면 됩니다. 하지만, 비교적 작은 변수만 넘길 수 있다는 점과 변수 값이 그대로 외부에 노출 된다는 단점이 있습니다.
두번째, Flash API 의 ExternalInterface 객체를 사용하는 방법
ExternalInterface는 SWF와 Flash Player컨테이너(브라우져나 Flashplayer를 소유할 수 있는 모든 것들)간에 직접 통신 할 수 있도록 도움을 주는 클래스 입니다. Javascript와의 통신을 위한 중요한 기능을 제공하고 있으며 Adobe에서는 Javascript와의 통신에 ExternalInterface를 사용하도록 권장합니다.
통신은 양방향으로 모두 가능 합니다. SWF에서 Javascript의 함수나 변수에 접근할 수 있으며 변경도 가능합니다. 반대로 Javascript에서 SWF 안에 있는 Flash 객체들도 접근 가능 합니다. 하지만 ExternalInterface는 운영체제와 브라우저가 지원 하지 않으면 사용할 수 없습니다. 지원하는 OS와 브라우저들은 다음과 같습니다.
브라우저 | 운영체제 | 운영체제 |
Internet Explorer 5.0 이상 | Windows | |
Netscape 8.0 이상 | Windows | MacOS |
Mozilla 1.7.5 이상 | Windows | MacOS |
Firefox 1.0 이상 | Windows | MacOS |
Safari 1.3 이상 | MacOS |
위와 같이 사용할 수 있는 환경이 존재 하기 때문에 사용전 체크를 해 줘야 합니다.
ExternalInterface.available :Boolean = 이 값이 true를 반환하면 사용가능하고 false이면 사용 불가능 합니다.
if(ExternalInterface.available){// 통신 실행}
위와 같은 코드를 통해 사용 가능 여부를 체크 하고 사용해야만 합니다. ExternalInterface는 통신을 위한 두가지 메소드를 제공합니다.
ExternalInterface.call(functionName:String,...arguments):*
먼저 ExternalInterface.call은 SWF를 임베디드(소유)하고 있는 컨테이너의 메소드를 호출하는 함수 입니다.그함수를 수를 호출 할 수 있을 뿐만 아니라, 변수를 전달하여 실행 할 수 있습니다. 예를들어 다음과 같이 메소드를실행 하면 브라우져에서 alert()창을 띄웁니다. (여기서는 주로 사용되는 브라우저를 예를들어 설명하겠습니다.)
ExternalInterface.call("alert","alert function is called");
전달할 인수가 없을때는 빈공간으로 호출할 수 있고, 전달한 인수가 많아지면 그 갯수 만큼 arguments 자리에 넣어
주면 됩니다.
ExternalInterface.addCallback(functionName:String, closure:Function):void
addCallback의 첫번째 인수인 functionName은 Javascript에서 SWF안에 있는 Actionscript 함수를 호출할때 사용하는 이름이고, closure는 실제로 SWF 에서 호출 되는 함수명 입니다. 이 두가지 파라미터가 처음 사용할때 많이 헛깔리는 부분인데요.
예를 들어 SWF에서 addCallback 메소드를 아래와 같이 호출 하면
ExternalInterface.addCallback("sendToActionScript", receivedFromJavascript);
sendToActionScript는 Javascript에서 SWF 에 있는 receivedFromJavascript 함수를 호출 한다는 의미 입니다. 결국 sendToActionScript는 Javascript에서 사용하는 함수이고 receivedFromJavascript는 Actionscript에서 호출되는 함수 입니다. 예를 들어 보겠습니다. (Adobe 도움말에 있는 예제)
예제 샘플
if (ExternalInterface.available) { output.appendText("Adding callback...\n"); ExternalInterface.addCallback("sendToActionScript", receivedFromJavaScript); if (checkJavaScriptReady()) { output.appendText("JavaScript is ready.\n"); } else { output.appendText("JavaScript is not ready, creating timer.\n"); } } else { output.appendText("External interface is not available for this container."); } 우선 ExternalInterface.available로 ExternalInterface 객체를 사용할 수 있는지 확인한 후에 addCallback 메소드를 실행 시켰습니다. addCallback 메소드를 등록 한 후에 checkJavaScriptReady() 메소드를 호출하여 javascript 호출이 가능한지 판단 합니다. 호출이 가능한지 체크 하는 이유는 브라우져가 모두 로드가 된 후에 Javascript 메소드를 호출 할 수 있기 때문 입니다. 그래서 Javascript안에 있는 isReady 메소드를 호출하여 반환 값이 true가 넘어 오면 준비가 된걸로 생각하고 스크립트가 진행 됩니다.
ExternalInterface.addCallback 을 등록했기 때문에, 해당 SWF를 임베디드한 브라우져의 Javascript에서 sendToActionScript 메소드를 호출하면 SWF 안에 있는 receivedFromJavaScript 메소드가 실행 됩니다.
private function receivedFromJavaScript(value:String):void { output.appendText("JavaScript says: " + value + "\n"); }
ExternalInterface.call 메소드와 같이 Javascript에서도 SWF로 변수를 전달할 수 있기 때문에 전달된 value값을 받아서 Javascript에서 어떤 값이 넘어 왔는지, TextField에 뿌려 주는 메소드 입니다.
주의해야 할 점 브라우저에 SWF 를 object 태그나, embed 태그를 이용하여 삽입할때, name 값과 id 값을 설정해 줘야 해당 SWF에 접근 할 수 있습니다. 페이지 안에는 여러개의 SWF가 존재 할 수 있기 때문에, id 값이나 name 값을 통해 해당 SWF를 찾아 내서 그 안에 있는 메소드에 접근 할 수 있는 것 입니다. Javascript에서 SWF를 찾아 내는 메소드는 다음과 같습니다.
function thisMovie(movieName) { if (navigator.appName.indexOf("Microsoft") != -1) { return window[movieName]; } else { return document[movieName]; } }
navigator.appName.indexOf("Microsoft") 를 이용하여 브라우져의 종류를 판단하여, 종류에 따라 접근 방법을 다르게 하여 SWF 를 찾아 내는 메소드 입니다.
전체 브라우저 소스는 아래와 같습니다.
<!-- saved from url=(0014)about:internet -->
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ExternalInterfaceExample</title>
<script language="JavaScript">
var jsReady = false;
function isReady() {
return jsReady;
}
function pageInit() {
jsReady = true;
document.forms["form1"].output.value += "\n" + "JavaScript is ready.\n";
}
function thisMovie(movieName) {
if (navigator.appName.indexOf("Microsoft") != -1) {
return window[movieName];
} else {
return document[movieName];
}
}
function sendToActionScript(value) {
thisMovie("ExternalInterfaceExample").sendToActionScript(value);
}
function sendToJavaScript(value) {
document.forms["form1"].output.value += "ActionScript says: " + value + "\n";
}
</script>
</head>
<body onload="pageInit();">
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
id="ExternalInterfaceExample" width="500" height="375"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">
<param name="movie" value="ExternalInterfaceExample.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#869ca7" />
<param name="allowScriptAccess" value="sameDomain" />
<embed src="ExternalInterfaceExample.swf" quality="high" bgcolor="#869ca7"
width="500" height="375" name="ExternalInterfaceExample" align="middle"
play="true" loop="false" quality="high" allowScriptAccess="sameDomain"
type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer">
</embed>
</object>
<form name="form1" onsubmit="return false;">
<input type="text" name="input" value="" />
<input type="button" value="Send" onclick="sendToActionScript(this.form.input.value);" /><br />
<textarea cols="60" rows="20" name="output" readonly="true">Initializing...</textarea>
</form>
</body>
</html>
Javascript 소스를 위에서 부터 보면 Flash 에서 ExternalInterface.call 로 호출한 isReady 메소드가 정의 되어 있습니다.
<body onload="pageInit();"> 태그가 있기 때문에 페이지가 모두 로드 되면 jsReady 변수가 true가 되어 Flash 에서 Javascript를 호출할 준비가 완료 되었다는 것을 알게 됩니다. 그리고 sendToActionScript 메소드를 실행 하면 thisMovie 를 이용하여 해당 SWF를 찾아낸 후에 그 안에 있는 receivedFromJavaScript 메소드를 호출하는 것 입니다.
thisMovie("ExternalInterfaceExample").sendToActionScript(value); 를 호출했다고 해서 SWF안에 있는 sendToActionScript메소드를 호출한다고 생각하면 안됩니다. addCallback을 통해 Javascript에서 sendToActionScript를 호출하였을때 SWF에서는 receivedFromJavasript 메소드를 호출한다고 등록 했기 때문에 receivedFromJavascript 메소드가 호출 됩니다.
그리고 SWF 에서 ExternalInterface.call 메소드를 통해 Javascript의 sendToJavaScript를 호출하면 form태그에 있는 textarea에 그 값이 추가 되는 예제 입니다.
위와 같이 ExternalInterface를 이용하면, Javascript에 있는 함수나 SWF 안에 있는 함수나 쉽게 접근 할 수 있습니다. 다만,
ExternalInterface.call 이나, ExternalInterface.addCallback 으로 등록한 함수만 접근 할 수 있는 단점이 있습니다. 그리고 ExternalInterface에는 몇가지 단점이 존재 합니다.
ExternalInterface의 단점
- 액션스크립트와 자바스크립트 모두에서 별도 코드의 라이브러리를 작성하여, 플렉스 어플리케이션의기능을 자바스크립에서 사용하거나 그 반대의 경우에 대해서도, ExternalInterface 클래스가 있어야 한다.
- ExternalInterface 클래스는 또한 제약이 있다. 기본 데이터 타입, 배열, 심플 오브젝트들은 전달할 수 있지만, 속성과 메소드를 가지는 사용자 정의 클래스를 전달하는 것은 문제가 있다.
그래서 Adobe에서는 Flex Ajax Bridge (FABridge) 라는 ExternalInterface의 단점을 보완한 Flex framework 기반의 오픈 소스 라이브러리를 제공 하고 있습니다. FABridge의 기능은 다음과 같습니다.
FABridge
- 리치 플렉스 컴포넌트를 에이젝트 어플리케이션 안에서 사용하고자 하지만 플렉스 코드를 엄청나게새로 쓰는 것은 원하지 않는 경우이다. 브릿지를 사용하는 일부 어플리케이션 내에 컴포넌트를 감싸려고 한다면, 자바스크립트로 전체를 스크립트할 수 있고, 이것은 서버에서 생성된 eval() 함수를 사용하는 형태의 자바스크립트를 이용한다.
- 우리 팀에 플렉스를 하는 사람이 한 두 사람뿐인 경우이다. FABridge 라이브러리는 팀의 모든 사람이 한 두 명의 플렉스 전문가가 만든 결과물을 사용할 수 있게 해준다.
- 플렉스와 에이젝스로 만들어진 부분을 모두 가지는 RIA를 만드는 경우이다. 우리는 ExternalInterface만을 이용하여 통합할 수도 있고, 남보다 앞서 FABridge를 사용하여 더 빠른 방법을 찾을 수도 있다.
공개된 라이브러리는 Flex 에 한정되어 만들어 졌지만, Flash platform에 모두 사용할 수 있도록 컨버팅이 가능한 구조로 되어 있습니다. 다음 문서에서는 FABridge가 어떻게 사용되며, FABridge를 기반으로한 새로운 Javascript 통신 객체에 대해 다룰 것 입니다.
관련 문서 : FABridge (Adobe Lab)
위의 예제에 대한 Actionscript 파일 전체 소스package { import flash.display.LoaderInfo; import flash.display.Sprite; import flash.external.ExternalInterface; import flash.text.TextField; public class FlashVarsExample extends Sprite { private var field:TextField; public function FlashVarsExample() { field = new TextField(); field.autoSize = "left"; addChild(field); var keyStr:String; var valueStr:String; var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters; for (keyStr in paramObj) { valueStr = String(paramObj[keyStr]); field.appendText("\t" + keyStr + ":\t" + valueStr + "\n"); } } } }
=================================
=================================
=================================
출처: http://dol2156.tistory.com/124
HTML 에서 값을 넘길수가 있다.
워낙 브라우져를 싫어 하던 터라... 이런게 존재한다는것도 몰랐다.
보통 임베디드나 외부 연동할때는 익스터널이나 소켓으로 받거나 주는데,,
이런기능이 있다니,., 간편하긴 하다.
먼져 HTML 단에서는.
<body>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="651" height="407" id="FlashID" title="paramTest">
<param name="FlashVars" value="PARAM1=KOREA&PARAM2=USA&PARAM3=UK3"/>
이다.
여기서 보면 추억의 txt 파일에서 변수를 불러 오던 시절의 "&" 가 생각난다.
그와 마찮가지로 문자열에
" 파라미터 = 값 & 파라미터 =값 ... "
으로 쭉~ 적어주자
body 밑에 object classid 밑에 넣어 주면 된다 .
일단 보면 param 태그가 여럿 있다. 거기에 하나로 넣어 주면 된다.
as3 에서는
private var _param:Object;
private var str:String;
public function testParam()
{
_param = stage.loaderInfo.parameters;
var Tx:TextField = new TextField;
addChild(Tx);
Tx.width = stage.stageWidth;
for each(var getValue in _param)
{
str = getValue;
Tx.appendText(str + "\n");
}
}
=================================
=================================
=================================
플래시 ActionScript3.0에서 FlashVars 파라미터를 사용하는 방법을 정리해 보았습니다.
HTML에서 파라미터 넘기는 방법
<script language="javascript">
if (AC_FL_RunContent == 0) {
alert("This page requires AC_RunActiveContent.js.");
} else {
AC_FL_RunContent(
'codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0',
'width', '440',
'height', '280',
'src', 'TodayPapers',
'quality', 'high',
'pluginspage', 'http://www.macromedia.com/go/getflashplayer',
'align', 'middle',
'play', 'true',
'loop', 'true',
'scale', 'showall',
'wmode', 'transparent',
'devicefont', 'false',
'id', 'TodayPapers',
'bgcolor', '#ffffff',
'name', 'TodayPapers',
'menu', 'true',
'allowFullScreen', 'false',
'allowScriptAccess','sameDomain',
'movie', 'TodayPapers',
'salign', '',
'FlashVars', 'SCT=A&GCC=AA00999'
); //end AC code
}
</script>
<noscript>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="440" height="280" id="TodayPapers" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="allowFullScreen" value="false" />
<param name="FlashVars" value="SCT=A&GCC=AA00999" />
<param name="movie" value="TodayPapers.swf" /><param name="quality" value="high" /><param name="wmode" value="transparent" /><param name="bgcolor" value="#ffffff" /> <embed src="TodayPapers.swf" quality="high" wmode="transparent" bgcolor="#ffffff" width="440" height="280" name="TodayPapers" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
</noscript>
AS3
//Case#1
var strSCT = loaderInfo.parameters.SCT;
var strGCC = loaderInfo.parameters.GCC;
//Case#2
var keyStr, valueStr:String;
var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters;
for(keyStr in paramObj)
{
valueStr = String(paramObj[keyStr]);
if(keyStr == "SCT")
{
strSCT = valueStr;
}
if(keyStr == "GCC")
{
strGCC = valueStr;
}
}
//Case#3
var parameters:Array = loaderInfo.parameters;
strSCT = parameters["SCT"];
strGCC = parameters["GCC"];
[출처] [AS3] FlashVars In AS3.0|작성자 막스
=================================
=================================
=================================
출처: http://2rang.tistory.com/2
많이들 아시는 내용이라 생각되지만요...
서치 해 본 결과 이에 해당하는 글이 없는것 같아서.. 하나 올립니다.
swf 파일에 파라미터로 변수를 전달하고 사용하는 방법입니다.
as 2.0에서는 간단하게 데이터를 주고 받을땐 많이들 사용했었죠.
[AS 2.0]
먼저 as2.0에서는,
쿼리스트링 방식..
<object ...
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="test.swf?aaa=1&bbb=2" />
<param name="quality" value="high" />
<embed src="test.swf?aaa=1&bbb=2" ...
.../object>
위와같이 하고,
flash 도큐먼트의 하위레벨(_level0)에서
this.aaa나 _root.aaa로 변수 값을 받아
사용 할 수 있었습니다.
[AS 3.0]
반면, as3.0에서는,
i) FlashVars 방식..
AC_FL_RunContent( ...
...
'FlashVars', '변수명 = 변수값'
...
... );
ii) 쿼리스트링 방식..
<object ...
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="test.swf?aaa=1&bbb=2" />
<param name="quality" value="high" />
<embed src="test.swf?aaa=1&bbb=2" ...
.../object>
위와같이 하고,
class 내부에서,
var obj:Object = LoaderInfo(this.root.loaderInfo).parameters;
_aaa = obj["aaa"];
_bbb = obj["bbb"];
로 간편하게 ... 넘어온 변수를 사용하시면 되겠습니다.
FlashVar 방식..이든 쿼리스트링 방식..이든 데이터를 swf에 전달하기 위해 전문적으로 설계되지는 않았다고 합니다.
아주 작은 데이터 전송일때만 사용하고 복잡한 데이터엔 URLLoader.. 를 사용하기를 권한다고 합니다.
그럼 수고하셔욧.
=================================
=================================
=================================
html 문서
------------------------------------------------------------
<HTML>
<HEAD>
<meta http-equiv=Content-Type content="text/html; charset=ISO-8859-1">
<TITLE>fl_08</TITLE>
</HEAD>
<BODY bgcolor="#FFFFFF">
<!-- URL's used in the movie-->
<!-- text used in the movie-->
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,79,0"
WIDTH="550" HEIGHT="400" ALIGN="">
<PARAM NAME=movie VALUE="lv_08.swf"> <PARAM NAME=quality VALUE=high> <PARAM NAME=bgcolor VALUE=#FFFFFF>
<param name="FlashVars" value="myVar=22222222">
<EMBED src="lv_08.swf" WIDTH="550" HEIGHT="400" ALIGN="" quality=high bgcolor=#FFFFFF
TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer">>
</OBJECT>
</BODY>
</HTML>
** flash 액션 스크립트
this.createTextField("t_txt", 1, 100, 100, 1, 1);
t_txt.autoSize = true;
t_txt.text = "the external variable is:\n" + myVar;
------------------------------------------------------------------------------
다른 방법
♥param name="movie" value="myMovie.swf?test=1234"♥ <---get 방식으로 변수 test에 1234값을 보내준다.
플래시에서 외부 변수를 받는 방법.
HTML 페이지에서는 FlashVars 라는 속성으로 Parameter 를 넘겨주고
FLASH 에서는 get("속성이름") 으로 받으면 된다.
_root.loadVariables("test.htm", "", get); <----문서의 변수를 가지고 와서 _root에 풀어 놓는다. (html에서 변수를 보냈다면 안 써져도 된다.)
if (_root.test == 1234){
gotoAndStop(3);
}
else {gotoAndStop(5);}
------------------------------------------------------------------------------
[출처] flash , parameter , 플레시에 파라미터값 넘기기 |작성자 쿨한아이
=================================
=================================
=================================
출처: http://www.cyworld.com/redshop/2304753
<script>
function window.getParameter(strParamName) {
var arrResult = null;
if (strParamName)
arrResult = location.search.match(new RegExp("[&?]" + strParamName+"=(.*?)(&|$)"));
return arrResult && arrResult[1] ? arrResult[1] : null;
}
function getParam(id){
var param = getParameter(id);
return param;
}
</script>
test.html에 위의 소스를 삽입한 뒤
http://www.test.html?myName=김태환
이라고 하여 html에 파라미터를 넘기면
플래시에서 ExternalInterface.call을 이용하여
var myName:String = ExternalInterface.call("getParam", "myName");
trace("myName : " + myName); //myName : 김태환
로 하여서
html로 넘어온 값을 플래시에서 받을 수 있다.
=================================
=================================
=================================
출처: http://blog.naver.com/sangsanq?Redirect=Log&logNo=50068961881
XML을 플래시 내부에서 말고 외부에서 경로를 적어서 불러 오게끔 하고 싶은신거죠
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="550" height="400" id="Untitled-1" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="allowFullScreen" value="false" />
<param name="movie" value="Untitled-1.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<embed src="Untitled-1.swf?valueXml=/xml경로/menu.xml" quality="high" bgcolor="#ffffff" width="550" height="400" name="Untitled-1" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
플래시 내부에선var XmlUrl= _root.valueXml
해주시면 외부에 valueXml경로를 받아 옵니다.[출처] 플래시 외부 파라미터|작성자 온라인교육사이트구축
=================================
=================================
=================================
출처: http://blog.hansune.com/442
플래시에 파라메터 값 전달하기(FlashVars)
posted by 한수댁 2013/03/18 13:09
html 에서 플래시 (swf) 로 간단한 파라메터를 전달하고자 한다면,,
FlashVars 를 사용한다.
문서:
http://helpx.adobe.com/flash/kb/pass-variables-swfs-flashvars.html
Object 로 포함되어 있을 경우 :
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="550" height="400" id="myFlashMovie" align="middle"> <param name="movie" value="myFlashMovie.swf" /> <param name=FlashVars value="myVariable=Hello%20World&mySecondVariable=Goodbye" /> <!--[if !IE]>--> <object type="application/x-shockwave-flash" data="myFlashMovie.swf" width="550" height="400"> <param name="movie" value="myFlashMovie.swf" /> <param name=FlashVars value="myVariable=Hello%20World&mySecondVariable=Goodbye" /> <!--<![endif]--> <a href="http://www.adobe.com/go/getflash"> <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /> </a> <!--[if !IE]>--> </object> <!--<![endif]--> </object> |
Embed 로 포함되어 있을 경우 :
<embed src="myFlashMovie.swf" quality="high" bgcolor="#ffffff" width="550" height="400" name="myFlashMovie" FlashVars="myVariable=Hello%20World&mySecondVariable=Goodbye" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflash" /> |
간단한 접근 방법
//swf 자신의 LoaderInfo 객체를 접근해서, //FlashVars 를 통해 들어온 myVariable 이란 변수값을 읽는다. var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters.myVariable; trace( paramObj.toString()); |
FlashVars 의 모든 변수와 값 접근 방법
try { var keyStr:String; var valueStr:String; var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters; for (keyStr in paramObj) { valueStr = String(paramObj[keyStr]); trace("\t" + keyStr + ":\t" + valueStr); } } catch (error:Error) { trace(error.toString()); } |
* 액션스크립트 2.0 으로 작성된 경우, 직접 접근이 가능하다. 마치.. 전역변수처럼.
// AS2 trace( myVariable ); |
* 플래시 빌더(플렉스)에서는 이렇게 접근
// Flex 4.6 trace( FlexGlobals.topLevelApplication.parameters.myVariable ); |
문서 http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf626ae-7feb.html
=================================
=================================
=================================
html에서 php 로그인 상태를 읽어와서, 이것을 파라미터를 통해 플래시에 인식시키고, 플래시가 이것에 반응하는 방식입니다.
//먼저 플래시 파일이 들어간 페이지의 플래시 파라미터 관련 html 입니다.//
<ul id="top_navi" >
<li><A HREF="">
<comment id="flash_obj">
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" width="880" height="90">
<param name="movie" value="/templates/images/global_navi.swf?usr_id=<!-- {$smarty.session.userid} -->">
<param name="quality" value="high">
<param name="usr_id" value="<!-- {$smarty.session.userid} -->">
<!-- Hixie method -->
<!--[if !IE]> <-->
<object type="application/x-shockwave-flash" data="/templates/images/global_navi.swf" width="880" height="90">
// 위의 html 에서 빨간색으로 된 부분.. 즉 smarty 예약변수를 파라미터로 지정한 부분입니다.
플래시에서는 이 변수를 인식할때
일반적으로 사용하는
if(usr_id==$smarty.session.userid){
gotoAndStop(2);
}
이런 스크립트로 하면 반응을 하는지요.
반응을 하지 않아서 질문 드립니다.
smarty예약변수를 인식하는 다른 방법이 있는지요? LV(LordVars)나 로드 배리어블 등을 사용해야 하는지요.
usr_id 파라미터의 값이 $smarty.session.userid 일때 2번 프레임으로 이동하면 됩니다.
좋은 답변 부탁드립니다.
플래시 액션 손을 놓은지 너무나 오래되어 우문을 드립니다.
질문자 채택된 경우, 추가 답변 등록이 불가합니다.
re: html에서 지정한 플래시 파라미터 변수를 플래시에서 인식하는 방법 입니다.
jj0759sm 답변채택률84.8% 2007.10.17 13:40
답변 추천하기
질문자 인사
역시.. 그랬군요.. 플래시 스크립트 문제가 아니라.. html에서.. 문제가.. 답변 감사합니다.
파라미터 네임으론 변수를 받을 수 없습니다.
HTML에는 아래와 같이 넣으시면 됩니다...
<param name="FlashVars" value="usr_id=<?=$smarty.session.userid?>">
<param name="movie" value="../flash/screen.swf?usr_id=<?=$smarty.session.userid?>">
$smarty.session.userid의 값이
회원 로그인시의 id와 같다면
아래처럼 플래시 액션을 넣으시면 됩니다.
if(usr_id){ //usr_id값이 있을때(로그인 했을경우)
gotoAndStop(2);
}
플래시 액션에 usr_id값을 확인하시려면
trace(usr_id);
이렇게 해보시면 usr_id값이 무엇인지 알 수 있습니다.
=================================
=================================
=================================
출처: http://haneulnoon.tistory.com/76
html페이지 에서 플래시 파일 삽입시 플래시 파일로 파라미터 넘기기
PROGRAMMING/HTML+JAVASCRIPT 2010/03/16 17:57
<HTML>
<HEAD>
</HEAD>
<BODY bgcolor="#99CC00">
<!-- 플래시 파일 삽입 부분 -->
<object ...........생략..........>
<PARAM NAME=movie VALUE="...........">
<PARAM NAME=quality VALUE=high>
...................................
<PARAM NAME="FlashVars" VALUE="num=5" />
<EMBED src="..............swf" FlashVars="num=5" .........................></EMBED>
</OBJECT>
</BODY>
</HTML>
파라미터를 넘기는 방법은 위와 같이 두 가지 방법(빨간 글씨로 표시 되어 있는 부분)이 있는데 이게 브라우저 마다(파폭과 익스 등등) 값을 전달하는 방법이 다르기 때문에 두 가지 방법 모두 써주는 것이 좋다.
( 어떤 방법이 파폭이고 어떤 방법이 익스였는지 기억은 안나죠;; 궁금하면 테스트 해볼 것ㅋ)
아무튼 이렇게 해놓고 플래시 파일 안의 코드에서는
var i = loaderInfo.parameters.num;
이런식으로 접근하면 된다. 알고 나면 별거 없다는 거. 모르면 헤멘다는거. (난 또 잊어버릴꺼니까 블로그에다가 메모를 해둔다.)
갑자기 일때문에 잠깐 플래시써봤는데 플래시 은근 재미있네.
=================================
=================================
=================================
출처: 202psj.tistory.com
플래시 빌더 4.0 이상 파라미터 넣기
액션스크립트 프로젝트 밑의 폴더 아래 html 파일 아래와 같이 본다.
html-template -> index.template.html
<script type="text/javascript" src="swfobject.js"></script>
<script type="text/javascript">
<!-- For version detection, set to min. required Flash Player version, or 0 (or 0.0.0), for no version detection. -->
var swfVersionStr = "${version_major}.${version_minor}.${version_revision}";
<!-- To use express install, set to playerProductInstall.swf, otherwise the empty string. -->
var xiSwfUrlStr = "${expressInstallSwf}";
var flashvars = {par:"이것은데이터"}; // <-- 이처럼 이부분을 바꾸어주면 빌더에서 값이 나온다
var params = {};
params.quality = "high";
params.bgcolor = "${bgcolor}";
params.allowscriptaccess = "sameDomain";
params.allowfullscreen = "true";
var attributes = {};
attributes.id = "${application}";
attributes.name = "${application}";
attributes.align = "middle";
swfobject.embedSWF(
"${swf}.swf", "flashContent",
"${width}", "${height}",
swfVersionStr, xiSwfUrlStr,
flashvars, params, attributes);
<!-- JavaScript enabled so display the flashContent div in case it is not replaced with a swf object. -->
swfobject.createCSS("#flashContent", "display:block;text-align:left;");
</script>
=================================
=================================
=================================
'ADOBE > ActionScript' 카테고리의 다른 글
플래시 AS3.0 URL 데이터의 처리-GET과POST 데이터 보내기 관련 (0) | 2020.09.19 |
---|---|
플래시 AS3.0 마우스 이밴트 처리 관련 (0) | 2020.09.19 |
플래시 as3.0 삼성 스마트 티비 플래시 자바스크립트 연동관련 (0) | 2020.09.19 |
플래시 AS3.0 액션스크립트와 자바스크립트 연동 관련 (0) | 2020.09.19 |
플래시 액션스크립트 , 플렉스 개념잡기 관련 (0) | 2020.09.19 |