음....UTF-8일 때에는 swf파일명 뒤에 ?paramname=value 이런식으로도 한글이 안 깨지는데요.
EUC-KR일 때에는 flashVars로 안넘기면 한글이 깨지네요. flashVars로 넘기면 안깨져요. 신기해요!

EUC-KR인 경우
한글깨짐 경우는 swf파일 뒤에 파라메터를 붙인 경우
[code]<object id="paramTest" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
        width="300" height="120">
    <param name="movie" value="ParamTest.swf?nickName=머드초보" />
        <object type="application/x-shockwave-flash"
                data="ParamTest.swf?nickName=머드초보" width="300" height="120">
        </object>
</object>
[/code]
사용자 삽입 이미지

안 깨지게 하려면 flashVars를 이용
[code]<object id="paramTest" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
        width="300" height="120">
    <param name="movie" value="ParamTest.swf" />
    <param name="flashVars" value="nickName=머드초보" />
        <object type="application/x-shockwave-flash"
                data="ParamTest.swf" width="300" height="120"
                flashVars="nickName=머드초보">
        </object>
</object>[/code]
사용자 삽입 이미지
그리고, flashVars를 이용해서 해야지 플래시가 캐시가 된다고 하네요.
nickName같은 것이 계속 바뀌는 것이라면 플래시를 서버에서 계속 요청하게 되는 것이라고 하네요.
그래서 flashVars라는 것이 있는 것 같음.

파라메터 넘길 때 utf-8인 경우에는 어떤식으로 해도 깨지지 않음. utf-8 짱-_-

 
Posted by 머드초보

댓글을 달아 주세요

  1. 구철호 2009.08.12 15:44  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.

    6월에는 잘 사용 했었는데 오늘 FLEX 빌더에 들어가서 작업 하려고 하니 갑자기

    아래와 같은 에러가 나타나네요.

    SDK 버젼은 "Use the server SDK" 이걸 선택해서 했는데요.

    아무리 해도 안되네요.



    도와 주세요...--;;



    -- 에러 메세지

    Severity and Description Path Resource Location Creation Time Id
    unable to load SWC asSQL-Beta2.7.swc HGEIS Unknown 1249978869890 51

    • 머드초보 2009.08.23 19:23  댓글주소  수정/삭제

      안녕하세요 답변이 완전 늦었네요-_-
      그건 왠지 swc관련 에러같아보이네요.
      swc가 없다고 나오는 것 같아요 ㅠ

  2. 루든 2009.09.25 18:01  댓글주소  수정/삭제  댓글쓰기

    Object - object 구조네요? Object-Embed 구조를 잘못적으신건가요?

    • 머드초보 2009.09.27 11:50  댓글주소  수정/삭제

      IE6인가? 빼고는 다 되는 걸로 알고 있습니다^^
      swfobject에서는 저 방법을 예제로 보여주고 있더라구요.

 
자바스크립트와 Flex와 통신을 해주는 FABridge라는 놈은.....
우선 처음에 접하게 되면 혈압을 약 50%를 상승시켜주는 효과를 가져다 줍니다.

그 이유는 로컬에서는 테스트를 할 수 없습니다-_-;
즉, file:///D:/workspace/flex/~~~ 요런 경로에서는 실행할 수 없습니다.
처음에 그냥 flex builder에서 실행할 때에는 아무런 경고가 뜨지 않습니다. 하지만, export해서 build release를 한다음에 bin-release에 있는 html파일을 실행하면 요런 에러가 뜹니다-_-; 이걸로 혈압이 10%상승했죠.
SecurityError: Error #2060: 보안 샌드박스 문제가 발생했습니다. ExternalInterface 호출자 file:///D:/workspace/flex/FABridgeTest111/bin-release/FABridgeTest.swf은(는) file:///D:/workspace/flex/FABridgeTest111/bin-release/FABridgeTest.html에 액세스할 수 없습니다.
    at flash.external::ExternalInterface$/_initJS()
    at flash.external::ExternalInterface$/addCallback()
    at bridge::FABridge/initializeCallbacks()
    at bridge::FABridge()
    at FABridgeTest/_FABridgeTest_FABridge1_i()
    at FABridgeTest()
    at _FABridgeTest_mx_managers_SystemManager/create()
    at mx.managers::SystemManager/initializeTopLevelWindow()
    at mx.managers::SystemManager/http://www.adobe.com/2006/flex/mx/internal::docFrameHandler()
아놔...그렇구나....-_-; 그래서 꼼수로....톰캣과 blazeds를 이용합니다-_-;
프로젝트를 생성할 때 ProjectName에 FABridgeTest로 하고, Web application으로 하고, Application ServerType을 J2EE로합니다. 톰캣을 사용하는 겁니다. 이렇게 생성한 놈은 실행할 때 http://localhost:8080/프로젝트명/프로젝트명.html로 실행해주기 때문에 테스트를 할 수 있습니다.
Next를 하고, Target runtime에 tomcat을 설정해주고, Flex War파일에는 blazeds.war파일을 선택합니다. Finish를 선택하여 프로젝트를 만듭니다.

기존에 있던 index.templete.html은 FABridge사용에 문제가 좀 있어서 다시 생성만들어야합니다.
http://olegflex.blogspot.com/2008/06/swfobject-2-flex-template.html
여기에 가면 templete을 만들어 놓은 것이 있는데 다운받고 압축을 풀면, html-template폴더가 있는데, 기존의 html-template폴더 날려버리고, 이걸로 대체합니다.

이제 필요한 것은 FABridge.js파일인데, 이 파일은 기존의 것을 사용하면 swfobject 2.1에서는 사용할 수 없습니다. 그래서 수정한 버전이 필요합니다. 기존것으로 하려다 혈압이 약 20%상승한 듯 합니다.
http://www.swffix.org/swfobject/swfobject_flex3/
이곳에 가면 예제와 FABridge.js와 history.js파일이 있는데 이걸 html-templete폴더와 ./history폴더에 각각 복사합니다.
예제를 만들어봅시다.
index.templete.html파일을 열어서 bridgeName을 지정해줍니다.
[code]
var flashvars = {
    bridgeName: "mudchobo"
};
[/code]
지정해주지 않으면 flash가 디폴트가 됩니다.
html-templete폴더에 test.js파일을 만들어서 테스트를 만들어봅시다.
test.js
[code]

var flexApp;

FABridge.addInitializationCallback( "mudchobo", function() {
    flexApp = FABridge.mudchobo.root();
    var callback = function() {
        alert('flex로 호출한 javascript메소드');
    }
    flexApp.getMyButton().addEventListener("click", callback);
});

function callFlexFunction() {
    flexApp.flexFunction('javascript로 호출한 flex메소드');
}
[/code]
FABridge.addInitializationCallback함수는 birdge이름이 mudchobo인 flash가 초기화가 다 되면 호출이 되는 듯합니다. 로드가 다 된 상태면 저 뒤에 함수를 호출하게 되는 듯합니다.
window.onload에다가 때려박으면 FABridge.mudchobo가 undefined가 되더라구요. 이걸로 혈압이 약 10%상승했습니다.
javascript에서 flex버튼 이벤트가 발생했을 때 이벤트를 걸 수 있습니다. getMyButton()네이밍 룰은 flex에서 버튼 id가 myButton이면 getMyButton으로 해당 컴포넌트를 가져올 수 있습니다. id가 mudchobo면 getMudchobo()가 되겠죠. addEventListener에 click시 callback함수를 호출하도록 이벤트를 추가합니다.

그리고, callFlexFunction이라는 메소드를 추가해서 이것은 flex메소드를 호출하는 겁니다.
flexApp객체를 통해 그냥 함수명을 호출하면 호출이 됩니다.

index.templete.html에다가는 head부분에다가
[code]
<script type="text/javascript" src="FABridge.js"></script>
<script type="text/javascript" src="test.js"></script>
[/code]
body부분에다가 button을 추가
[code]
<div>
    <input type="button" id="javascriptButton" value="callFlex" onclick="callFlexFunction();"/>
</div>
[/code]
이제 flex코드로 가봅시다. 우선 FABridge.as파일이 필요합니다. 이 파일은 C:\Program Files\Adobe\Flex Builder 3 Plug-in\sdks\3.0.0\frameworks\javascript\fabridge\src에 있습니다. 아주 꼭꼭 숨겨두셨어요-_-;
[code]
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
    xmlns:bridge="bridge.*" width="300" height="150">
   
    <mx:Script>
        <![CDATA[
            import mx.controls.Alert;
            public function flexFunction(data:String):void
            {
                Alert.show(data);
            }
        ]]>
    </mx:Script>
   
    <mx:Button id="myButton" label="callJavaScript" />
   
    <bridge:FABridge />
</mx:Application>
[/code]
중요한 점은 xmlns:bridge="bridge.*"랑 <bridge:FABridge /> 입니다.
이제 실행을 해봅시다.
아...여기서 이제 html-templete내용의 js파일을 고쳤는데 파폭에서 열고 소스보기하면 안바뀌어 있을 때가 있습니다. 그때는 Flex메뉴에서 Project -> clean을 해주면 되더라구요. 이걸로 혈압 10%상승!

실행하면 localhost로 뜨기 때문에 잘 될 겁니다. 소스파일입니다.

다음시간엔 실제 ajax를 요청해봐야겠다-_-;
 
Posted by 머드초보

댓글을 달아 주세요

  1. BlogIcon 꽃녀 2008.08.07 10:13  댓글주소  수정/삭제  댓글쓰기

    좋은정보 감사합니다.
    혈압 60% 상승한 관계로
    조금 있다가 다시봐야겠네용 ;;

    • 머드초보 2008.08.07 13:46  댓글주소  수정/삭제

      아넵 ^^
      혈압이....-_-;
      FABridge랑 swfobject를 연동하려다보니 배로 상승하더군요^^

  2. BlogIcon 검쉰 2008.08.07 14:40  댓글주소  수정/삭제  댓글쓰기

    60^2 % 상승할지도.. ㄷㄷㄷ

    • 머드초보 2008.08.07 14:48  댓글주소  수정/삭제

      핫핫 고혈압으로 쓰러져요 ^^
      바로 댓글을 달아주는 센스-_-;
      남들이 보면 일은 안하고 블로그만 하는줄알겠어요 ㅠㅠ
      이제 일해야지 ㅠ

  3. BlogIcon 전영재 2009.08.04 16:19  댓글주소  수정/삭제  댓글쓰기

    1년이 지나도 혈압은 마찬가지네요.

    • 머드초보 2009.08.07 23:34  댓글주소  수정/삭제

      와 이거 저도 오랜만에 보니까 뭔지 모르겠네요-_-
      내가 뭘쓴거지-_-

  4. 우람궁딩 2009.08.24 18:35  댓글주소  수정/삭제  댓글쓰기

    올려두신 글 잘 보았습니다.
    비슷한 고민을 하던 차에.. 참고가 될만한 반가운 글을 보았습니다.

    ...그런데..
    만약.. 위와 같은 경우에는 플렉스 에플리케이션을 생성해야 하는데..
    플렉스 모듈 컴포넌트를 사용할 경우에는 위 방법이 가능한지 궁금하네요..
    만약 된다면.. 어떤 방법으로 가능한지 조언 부탁드립니다. nn

    proverbs1609@empal.com

    • 머드초보 2009.08.27 10:59  댓글주소  수정/삭제

      음...모듈로 생성한 경우에는 제가 안해봐서 모르겠네요 ㅠ
      FABridge의 활용도는 그렇게 높은 것이 아니라서-_-
      저도 실무에서 사용하는 것을 본적이 없군요-_-

  5. BlogIcon bemga 2010.10.22 15:22  댓글주소  수정/삭제  댓글쓰기

    2년이 지나도 혈압은 마찬가지네요. ㅋㅋ

    • 머드초보 2010.11.05 19:30  댓글주소  수정/삭제

      사실 FABridge가 셋팅만 다하면 쓰기 편할 것 같긴 하지만,
      그냥 js를 호출하고 addCallback만으로도 충분히 구현하는데에는 문제가 없어보이네요~ 안쓰시는게 더 나아요^^

 

http://code.google.com/p/swfobject/
여기서 2.1버전을 다운로드할 수 있습니다.
기존에 1.5에서 사용하는 방식과 완전이 틀려졌습니다.

더욱 간편해지고 더욱 쉬워졌습니다.
해당 파일을 받고 압축을 풀면 매우 쉽게 예제가 나와있습니다.
[code]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
    <head>
        <title>SWFObject 2 dynamic publishing example page</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <script type="text/javascript" src="swfobject.js"></script>
        <script type="text/javascript">
        swfobject.embedSWF("test.swf", "myContent", "300", "120", "9.0.0", "expressInstall.swf");
        </script>
    </head>
    <body>
        <div id="myContent">
            <h1>Alternative content</h1>
            <p><a href="http://www.adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p>
        </div>
    </body>
</html>
[/code]
핵심부분은 저기 swfobject객체의 embedSWF메소드를 호출하면 됩니다.
저런식으로. 아주 간단해요.

만약 파라메터나 flashvars를 넘기고 싶다면
[code]
var flashvars = {
  bridgeName: "mudchobo"
};
var params = {
  menu: "false"
};
var attributes = {};

swfobject.embedSWF ( "test.swf", "myContent", "300", "120", "9.0.0",
    "expressInstall.swf", flashvars, params, attributes );
[/code]
이런식으로 파라메터값을 넘겨줄 수 있습니다.

어떤분은 기존 flex3가 생성하는 html-templete을 기존방식이 아닌 swfobject방식으로 바꿔서 templete을 재구성했더라구요.
http://olegflex.blogspot.com/2008/06/swfobject-2-flex-template.html
여기서 받을 수 있습니다.

기존에 AC_FL_RunContent란 메소드를 호출하는 index.templete.html파일을 보면 정말 복잡합니다. 하지만 저 템플릿방식으로 변경하면 소스코드도 이해하기 쉽고, 나중에 javascript를 삽입해서 테스트를 해보고 싶을 때 더욱 쉽게 작업할 수 있겠죠.
 
Posted by 머드초보

댓글을 달아 주세요

  1. BlogIcon 검쉰 2008.08.05 17:39  댓글주소  수정/삭제  댓글쓰기

    파폭3에서 한글 입력 제대로 되겠죠? ㅎㅎ
    아놔.. 힘드네요

    • 머드초보 2008.08.05 17:51  댓글주소  수정/삭제

      아...원래 한글입력이 잘 안됐나요?-_-;
      그건 제가 테스트를 안해봐서 잘 모르겠네요 ㅠㅠ
      지금 블로그를 재설치해서 정신이 하나도 없네요 ^^

    • BlogIcon 검쉰 2008.08.05 18:01  댓글주소  수정/삭제

      스킨이 바뀌였네~ 하고 생각하고 있었습니다 ㅎㅎ
      파폭3에서 한글입력이 안되는 오류가 있거든요.
      <object> 태그에서 <embed> 태그가 없을때..
      1.5 버전에서는 transparent 속성을 줬더니 동일하게 한글 입력이 안되던 버그가.. ㅎ

    • 머드초보 2008.08.05 18:08  댓글주소  수정/삭제

      아 그런 오류가 있었군요.
      저도 시도는 안해봐서 모르겠네요 ㅠ
      근데 저 애드클릭스가 FF에서 왜 모양이 이상하게 나오지-_-;

    • BlogIcon 검쉰 2008.08.06 16:22  댓글주소  수정/삭제

      파폭에서 한글입력 안되던 이유를 찾았습니다. ㅋ
      wmode 속성이 window 의 경우는 잘 되는데, 다른건 안되네요.. ㅎ

    • 머드초보 2008.08.06 16:40  댓글주소  수정/삭제

      음 그렇군요!
      찾으셨다니 다행이네요 ^^
      뭔가 문제를 발견하면 찾다가 시간이 지나도 못찾으면 점점 미쳐가죠-_-;