2

つまり、これは1つに2つの質問です。私の最初の質問は、これをどのように行うかです。

    document.write('
<div id="jwplayer">
<center>
<div id='mediaplayer'></div>
<script type="text/javascript">
  jwplayer('mediaplayer').setup({
    'flashplayer': 'jwplayer/player.swf',
    'id': 'playerID',
    'width': '640',
    'height': '580',
    'provider': 'rtmp',
    'streamer': 'rtmp://domain/recorder/_definst_',
'file': 'onSaveOk("+streamName+")'
  });
</script>
</center>
</div>
');

基本的には、関数が呼び出されたときにそのコードを出力したいだけです。

これは私の質問の2番目の部分です。この機能は、フラッシュビデオレコーダーが録画されたビデオの保存を終了したときに実行されます。フラッシュプレーヤーから関数の引数のすべての変数を取得します。jwplayerコードで変数の1つを使用したいのですが、どうすればよいですか?

関数は次のとおりです。

    function onSaveOk(streamName,streamDuration,userId,cameraName,micName,recorderId){
        //alert("onSaveOk("+streamName+","+streamDuration+","+userId+","+cameraName+","+micName+")");

        //the user pressed the [save] button inside the recorder and the save_video_to_db.XXX script returned save=ok
        //recorderId: the recorderId sent via flash vars, to be used when there are many recorders on the same web page
            $('#record').hide();
    document.write('
<div id="jwplayer">
<center>
<div id='mediaplayer'></div>
<script type="text/javascript">
  jwplayer('mediaplayer').setup({
    'flashplayer': 'jwplayer/player.swf',
    'id': 'playerID',
    'width': '640',
    'height': '580',
    'provider': 'rtmp',
    'streamer': 'rtmp://domain/recorder/_definst_',
'file': 'onSaveOk("+streamName+")'
  });
</script>
</center>
</div>
');


    }

ここでstreamName関数を使用しようとしましたが、機能しません。

'file': 'onSaveOk("+streamName+")'

どうすればいいですか?ありがとう。

4

2 に答える 2

6

まず、JavaScriptは複数行の文字列を許可しないため、すぐにdocument.write構文エラーがスローされます。あなたはそれについて行くために少なくともいくつかの方法があります。改行を削除して、文字列全体を1行にすることができます...

var lines = '<div id="jwplayer"><center>...</center></div>';
document.write(lines);

...しかし、それはそれほど読みにくい傾向があります。または、円記号を使用して改行をエスケープできます...

var lines = '<div id="jwplayer">\
    <center>\
      ...\
    </center>\
  </div>';
document.write(lines);

...これは読みやすくなりますが、おそらく一種の脆弱性があります。バックスラッシュの後の末尾の空白は、はっきりと見えずに壊れてしまいます。次に、文字列を一度に1行ずつ連結できます...

var lines = '<div id="jwplayer">';
lines += '<center>';
lines += '...';
lines += '</center>';
lines += '</div>';
document.write(lines);

...これは、最初の方法の読みやすさの問題と2番目の方法の脆弱性の問題をいくらか軽減すると思います最後に、文字列の配列を作成して結合することができます...

var lines = [
  '<div id="jwplayer">',
  '<center>',
  '...',
  '</center>',
  '</div>'].join(' ');
document.write(lines);

...これには、繰り返しを排除するという[完全に主観的な]利点がありlines += ...ます。いずれにせよ、それは決して網羅的なアプローチのリストではなく、ほとんどの場合、最も快適なものを使用することになります。

次に、あなたの文字列は、率直に言って、競合する一重引用符と二重引用符の巨大なミッシュマッシュです。文字列を囲むために使用しているのと同じ種類の引用符を文字列に含める必要がある場合は、それらをエスケープする必要があります。

var lines = "<div id=\"jwplayer\">";
lines += '<div id=\'mediaplayer\'></div>';

明らかに(?)エスケープを最小限に抑えたいと思います。また、htmlの文字列を作成しているので、それらを一重引用符で囲み、属性に二重引用符を使用することをお勧めします。値。しかし、繰り返しになりますが、それはあなたにとって最も理にかなっているスタイルです。

そして最後に、上記の両方の問題がstreamName、関数に渡されたパラメーターが機能しない原因になっています。これは、その行に到達するずっと前に、すでに多数のエラーが発生していたためです。文字列の問題をまっすぐに保つ場合は、

lines += "'file': 'onSaveOk(" + streamName + ")'";

希望どおりに機能するはずです。

注:document.write() a)タグの使用とb)タグの使用に関する義務的な警告については前述しました<center>が、これらの問題の両方について少し調査する必要があります。1998年に電話があり、「それはかっこいい、とにかくそれらを取り戻したくなかった」と言っただけです。

于 2012-10-10T02:07:41.643 に答える
2

パーティーに遅れて、私は実際に好きです:

//HTMLを開始します

var html = ''+
    '<body>'+
        '<div>'+
            '<a href="foo.bar">Foo Bar page</a>'+
        '</div>'+
    '</body>';

有効なJavaScript'foo'+ \ n \ r \ t'bar' =='foobar';

于 2014-12-13T12:55:42.873 に答える