2013년 9월  배포된 플래시 플레이어 11.8.800.168과  11.8.800.174  에서 한글 깨짐 현상이 있었습니다.
추석 전후에 일어난 장애라 대응 또한 쉽지 않았는데요.
 
자세히 알아보도록 하겠습니다.
먼저 168버전의 버그입니다.
Flash에서 javascript함수를 호출하고 인자로 한글을 넘길경우, 한글이 깨지는 문제입니다.
 
해결방법은 여러가지가 있겠지만 우리는 url encoding 처리를 하였습니다.

var msg = escape( data )                    // data를 url 인코딩한다
ExternalInterface.call("callJS", msg)       // javascript에서 디코딩한다

그런 다음 javascript에서 인자를 url decoding 하면 해당 문제는 해결 됩니다.

function callJS(msg)
{
   var data = unescape(msg);
}

Flash 수정과 같이 javascript의 수정이 같이 이루어지기 때문에 이런 구조가 여러 서비스에서 사용 중일 경우
javascript를 찾아 일일이  수정하기가 어려울 수 있습니다.
이럴 땐 Flash에서 아래와 같이 수정하여 처리도 가능합니다.  javascript정의를 Flash에서 하는 방식입니다.
다만 호출 부분을 문자열 하나로 조합을 해야 하니 전송할 인자 갯수가 많을 경우 문자열 결합을 잘 하셔야 합니다.

var msg = encodeURIComponent( data )                          // data를 url 인코딩한다
ExternalInterface.call("callJS(escape('" + msg + "'))")       // javascript에서 디코딩한다

 
다음, 174버젼의 버그입니다.
174버젼은 168버전과 반대 상황의 이슈입니다.
이번에는 Javascript에서 Flash의 함수를 호출하고 한글인자를 보낼때 깨지는 문제입니다.
 
대응방법은 위와 비슷합니다. 아래는 Flash가 호출할 javascript함수입니다. Flash로 데이터를 보내기전에 escape 함수를 통해 url encoding 처리를 합니다.

function getCafeName()
{
    return escape('한글 데이터');
}

Flash에서는 위의 함수 호출 후 리턴받은 한글 데이터를 unescape를 통해 url decoding 합니다.

var cafeName:String = unescape( ExternalInterface.call("getCafeName") );

 
Actionscript 에는 escape-unescape 함수와 유사한  encodeURIComponent-decodeURIComponent 함수가 존재하는데
이 함수를 이용할 경우 [ ‘ ] 와 같은 특수문자의 url encoding이 안되므로  [ ‘ ] 을 사용함으로 문자열 구간 지정이 잘못된다면 escape가 좀 더 안정적일 것 같습니다.
 
9월 27일 현재 168과 174가 다 해결된 175버전이 adobe사이트를 통해 배포가 되었습니다.
168, 174가 2주 정도의 짧은 기간동안 퍼졌지만 그래도 여러 사람이 사용중일 수 있으니 위와 같은 처리가 필요합니다.
위와 같은 처리를 하여도 175에서 문제가 발생하지는 않습니다.
 
 
 
 
 


0개의 댓글

답글 남기기

아바타 플레이스홀더

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다