2011-08-05 5 views
1

私の会社のFlash PlayerにJSONコマンドを送信しようとすると、JSON JavascriptからFlashへの通信の問題(ExternalInterfaceを使用):ハードコードされた文字列が機能します。そうでない場合は、

player.sendEvent("LOAD_PLAYLIST", json_str); 

が、奇妙な部分は、私はFirebugの者に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()+" "など)。

アイデア? ありがとうございます!

+0

を与える必要がありますか? – 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をするJavaScriptオブジェクトを渡す引用符に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); 
} 

このコードはテストされていませんが、それはどのようにのExternalInterfaceを使用せずにプレイヤーにJSONを送ってくださいあなたのアイデア

+0

これが動作しない場合あなたがすることができるもう一つのことがあります –

3

JSON文字列を使用して解決策が見つからない場合は、ExternalInterfaceがシリアル化を処理するため、代わりにオブジェクト(オブジェクトのJSON表現ではなくJavaScriptオブジェクト)を送信してみてください。

言い換えれば、オブジェクトは、独自のシリアル化および逆シリアル化を行うことなく、ExternalInterfaceを使用してJavaScriptとActionScript間で直接送信できます。

関連する問題