2012-11-29 7 views
9

이것은 스택 오버플로에 내 첫 번째 질문입니다. 처음으로 하나를 쓰고 싶지는 않지만 검색 바를 사용하여 해결책을 찾았습니다. 이번에는 그렇지 않았습니다. 달려 드는 문제는 좀 복잡하기 때문에 가능한 한 철저히 시험해 보겠습니다.AS3 플래시 - ExternalInterface 통해 html 렌더링

기본적으로 플래시의 기존 전자 상거래에 중국인 지불을 추가하고 있습니다. 전체 웹 사이트는 SWFObject를 사용하여 임베디드 된 AS3에 있으며 이미 다른 용도로 ExternalInterface를 사용하고 있습니다.

이 새로운 중국어 지불 방법은 약간 구식이므로 지불을 처리하는 이상한 방법이 있습니다. 모든 주문 세부 정보가 포함 된 POST를 서버에 보내면 HTML 페이지로 응답합니다. 내 문제는이 페이지를 렌더링하는 것으로서 Flash 내에서 수신하는 것을 고려하고 있습니다.

제가 지금 시도하고있는 해결책은 부분적으로 작동합니다. 즉 페이지를 볼 수 있지만 페이지에 있어야 할 한자가 잘못 렌더링됩니다. 한자 대신 외설적 인 문자가 보입니다. 따라서 HTML을 Flash에서 Javascript로 전달할 때 인코딩 문제가 발생했을 것입니다. 이것은 내가 그것을하고 있어요 방법은 다음과 같습니다

AS3 :

//extract html page from response 
var newHTML:String = e.currentTarget.data; 
//trim whitespace to avoid javascript error 
newHTML = newHTML.replace(/\n/g, ''); 
newHTML = newHTML.split("\r").join(""); 

if(ExternalInterface.available) 
    ExternalInterface.call("chinesePayment('"+newHTML+"')"); 
else 
    trace("External interface error"); 

자바 스크립트 :

function chinesePayment(param) { 
    var newWindow = window.open(); 
    //var unescaped = unescape(param); 
    newWindow.document.write(param); 
} 

내가, URIencoding 탈출 있지만 성공하지, 그래서, 언 이스케이프에 대해 장난 시도했습니다 네가 여기서 나를 도울 수 있기를 정말로 바라고있어!

감사합니다, 도메니코

편집 : 난 그냥 내가 그들의 서버에서 올바른 HTML 페이지를 받고있어 언급하고 싶습니다

. 나는 페이지를 로컬에 저장하려고 시도했다. 서버 응답에서 직접 HTML 코드를 복사하고 페이지 뷰를 올바르게 복사했다. 즉, AS3에서 Javascript로 페이지를 전달하는 과정에서 잘못된 것이 있어야합니다.

EDIT2 중요!

나는 문제가 팝업 인코딩 낳는 것을 깨달았다. 팝업에서 HTML을 복사 할 때 편집기에 붙여넣고 HTML을 올바르게 볼 수 있습니다. 팝업이 gbk 인코딩을 고려하지 않는 것 같습니다. 나는 지금이 문제에 대한 해결책을 찾고있다.

+0

FileReference를 통해 해당 데이터를 덤프 한 다음 HTML로 열면 브라우저에서 제대로 작동합니까? – Vesper

+0

나는 이것이 최종 해결책이 될 수 없기 때문에 또한 시도하지 않았습니다. 이 웹 사이트가 많은 주문을받는 것을 보면서 나는 각 주문에 대해 정적 페이지를 만드는 것을 피하고 싶습니다. 아무리해도 플래시에서 중단 점을 삽입하고 HTML을 복사하여 편집기에 붙여 넣으려고했습니다. 일단 내가 그 파일을 적절하게 렌더링했기 때문에, html은 거기까지 괜찮습니다. 나는 그것이 작동 하는지를보기 위해서이 솔루션을 시도 할 것이고, 그것이 어떻게 진행되는지 알려줄 것이다. – aberonni

+0

아니요, 올바른 HTML 페이지를 받았는지 여부와 모든 메타 데이터가 올바르게 설정되었는지 여부 및 기타 사항을 테스트하는 것입니다. 파일을 통해 전송 된 경우 올바르게 브라우저에 구성되면 올바른 HTML을 수신하고 JS에서 HTML 문자열을 더 처리해야합니다. 프로세스에서 오작동을 일으킬 수 있는지 여부는 알지 못합니다. 그렇지 않은 경우 잘못된/불완전한 HTML을 받거나 시스템의 글꼴이 부족하거나 관찰하는 동작의 프로그래밍 이외의 다른 원인이 있습니다. – Vesper

답변

2

마침내 해결책을 찾았습니다 !!

기본적으로 플래시에서 중국어 문자를 렌더링해야만 자바 스크립트에 전달할 때 이미 인코딩 된 것입니다. 나는 BYTEARRAY을받은 있도록 그래서 우선 나는 BINARY에 URLLoaderDataFormat의 유형을 변경했다 :

my_loader.dataFormat = URLLoaderDataFormat.BINARY; 

내가 코드 이런 식으로 수정 된 응답을받은 후 : 당신이 할 수

 var bytes:ByteArray = e.currentTarget.data; 
     var newHTML:String = bytes.readMultiByte(bytes.length,"gb2312"); 
     //trim whitespace to avoid javascript error 
     newHTML = newHTML.replace(/\n/g, ''); 
     newHTML = newHTML.split("\r").join(""); 

     if(ExternalInterface.available) 
      ExternalInterface.call("chinesePayment('"+newHTML+"')"); 
     else 
      trace("External interface error"); 

을 참조, 특정 byteArray 함수 덕분에 선호하는 charset을 사용하여 응답을 읽을 수 있으며 이제는 작동합니다!

자바 스크립트는 이스케이프 또는 유사하지 않고 동일하게 유지됩니다.이런 식으로 자바 스크립트 함수는 동등한 utf 문자가 아닌 중국어 문자가 포함 된 문자열을받습니다.

모두에게 감사 드리며 해결책을 찾았습니다.