2011-08-05 6 views
1

JSON 명령을 회사의 플래시 플레이어로 보내려고 시도하는 중 이상한 문제가 발생했습니다. 기본적으로, 나는이 플레이어에 재생 목록을 전달 드릴 수 없습니다 - 아무 반응이 없습니다 - 다음 명령을 사용하여 :JSON 플래시 통신 문제 (ExternalInterface 사용) : 하드 코딩 된 문자열이 작동합니다. 그렇지 않으면 그렇지 않습니다.

player.sendEvent("LOAD_PLAYLIST", json_str); 

하지만 이상한 부분이다 나는 방화범의 CONSOLE.LOG를 사용하여 전체 명령을 인쇄하면 작업을 복사하는 것이 및 붙여 넣기를 코드 (즉, 재생 목록을 하드 코딩)에 넣으면 모든 것이 매력처럼 작동합니다.

는 예를 들어, 다음 코드

player.sendEvent("LOAD_PLAYLIST", "{\"streams\": [{\"src\": \"rtmp:\/\/xxx.xxx.xx:80\/redirectvodxxx\/nas2.share\/h264\/512x384\/progname1\/prog_1_20110804.mp4\"},{\"src\": \"rtmp:\/\/xxx.xxx.xx:80\/redirectvodxxx\/nas2.share\/h264\/512x384\/progname2\/prog_2_20110804.mp4\"},{\"src\": \"rtmp:\/\/xxx.xxx.xx:80\/redirectvodxxx\/nas2.share\/h264\/512x384\/progname3\/prog_3_20110804.mp4\"}]}"); 

console.log('[loadNewListofContents] playing the following content list: player.sendEvent(\"LOAD_PLAYLIST\", ' + json_str.toString() + ');'); 

을 사용하여 얻어진 것으로, 내가 그것을 하드 코딩하는 경우, 그것을 작동합니다! 나는 생각할 수있는 모든 toString() 트릭을 시도했다. (예 : json_str.toString(), ' "+ json_str.toString() +'" ', etc ...).

아이디어가 있으십니까? 미리 감사드립니다.

+0

가 어떻게 ExternalInterface를 사용하지 않고 플레이어에 JSON을 보내려면 어떻게합니까 아이디어를 제공해야합니까? – Nek

+0

미안하지만, 내 잘못이야. 나는 우리가하지 않았다고 생각했지만, 플레이어의 개발자와 이야기를하고, 우리는 그것을 사용한다고 말했다. 방금 제목을 업데이트했습니다. –

+0

플레이어에 전달할 때 json_str에 적절한 데이터가 있는지 반드시 확인 하시겠습니까? – Nek

답변

2

코드 당신은

player.sendEvent("LOAD_PLAYLIST", "{\"streams\": [{\"src\": \"rtmp:\/\/xxx.xxx.xx:80\/redirectvodxxx\/nas2.share\/h264\/512x384\/progname1\/prog_1_20110804.mp4\"},{\"src\": \"rtmp:\/\/xxx.xxx.xx:80\/redirectvodxxx\/nas2.share\/h264\/512x384\/progname2\/prog_2_20110804.mp4\"},{\"src\": \"rtmp:\/\/xxx.xxx.xx:80\/redirectvodxxx\/nas2.share\/h264\/512x384\/progname3\/prog_3_20110804.mp4\"}]}"); 

그냥 자바 스크립트가 바로 SWF에 반대 통과 "\"따옴표
AS3 has known issues with that을 탈출하기 위해 사용하는 문자열입니다 기록했다.

// And in your AS3 code add this 
if(ExternalInterface.available){ 
    ExternalInterface.addCallBack("AS3functiontocall", AS3functiontocall); 
} 

function AS3functiontocall(var obj:Object):void{ 
    trace(obj.streams[0]); // might have to eval or JSON.decode the obj 
} 


// JavaScriptcode should look something like 
function sendList(){ 
    var container; 
    if (navigator.appName.indexOf("Microsoft") >= 0){ 
    container = document; 
    }else{ 
    container = window; 
    } 
    var obj = { 
     "streams": [ 
        {"src": "rtmp://xxx.xxx.xx:80/redirectvodxxx/nas2.share/h264/512x384/progname1/prog_1_20110804.mp4"}, 
        {"src": "rtmp://xxx.xxx.xx:80/redirectvodxxx/nas2.share/h264/512x384/progname2/prog_2_20110804.mp4"}, 
        {"src": "rtmp://xxx.xxx.xx:80/redirectvodxxx/nas2.share/h264/512x384/progname3/prog_3_20110804.mp4"} 
       ] 
    } 

    var result = container["yourswfnamehere"].AS3functiontocall (obj); 
} 

이 코드는 안된하지만, 그것은 당신에게

+0

이것이 작동하지 않으면 당신이 할 수있는 또 하나의 일이 있습니다. –

3

JSON 문자열을 사용하여 솔루션을 찾지 못하는 경우 ExternalInterface가 직렬화를 처리하므로 개체 대신 JSON 표현 대신 JavaScript 개체 인 개체를 보내보십시오.

즉, 직렬화 및 자체 역 직렬화를 수행하지 않고도 ExternalInterface를 사용하여 직접 JavaScript와 ActionScript간에 객체를 보낼 수 있습니다.

관련 문제