Javascript document.write('HTML CODE HERE')并使用flash抓取的var

CJ *_*lti 2 html javascript rtmp jwplayer

所以这是两个问题之一.我的第一个问题是我该怎么做?

    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>
');
Run Code Online (Sandbox Code Playgroud)

我基本上只想在调用函数时打印出该代码.

这是我的问题的第二部分,当flash录像机完成保存录制的视频时,此功能运行.它从flash播放器中获取函数参数中的所有变量.我想在我的jwplayer代码中使用其中一个变量,我该怎么做?

这是功能:

    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>
');


    }
Run Code Online (Sandbox Code Playgroud)

这是我尝试使用streamName函数的地方,但它不起作用:

'file': 'onSaveOk("+streamName+")'
Run Code Online (Sandbox Code Playgroud)

我该怎么做?谢谢.

ult*_*aut 5

首先,JavaScript不允许使用多行字符串,所以你document.write可以直接抛出语法错误.你至少有几种方法可以解决它.您可以删除换行符,使整个字符串成为一行...

var lines = '<div id="jwplayer"><center>...</center></div>';
document.write(lines);
Run Code Online (Sandbox Code Playgroud)

......但这往往不那么可读.或者你可以用反斜杠逃脱换行符......

var lines = '<div id="jwplayer">\
    <center>\
      ...\
    </center>\
  </div>';
document.write(lines);
Run Code Online (Sandbox Code Playgroud)

...它更具可读性,但可能有些脆弱 - 反斜杠之后的任何尾随空格都会破坏它而不会显而易见.接下来,您可以一次将字符串连接成一行...

var lines = '<div id="jwplayer">';
lines += '<center>';
lines += '...';
lines += '</center>';
lines += '</div>';
document.write(lines);
Run Code Online (Sandbox Code Playgroud)

... 认为有点减轻了第一种方法的可读性问题和第二种方法的脆性问题.最后,您可以创建一个字符串数组并加入它们......

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

......具有消除重复性的[完全主观]优势lines += ....在任何情况下,这绝不是一个详尽的方法列表,它主要归结为使用你最熟悉的任何东西.

接下来,坦白说,你的字符串是一个巨大的混合单引号和双引号.如果您需要在字符串中包含与用于包含字符串相同类型的引号,则需要转义它们:

var lines = "<div id=\"jwplayer\">";
lines += '<div id=\'mediaplayer\'></div>';
Run Code Online (Sandbox Code Playgroud)

显然(?)你想要将转义保持在最低限度,并且由于你正在创建一个html字符串,你可能想要用单引号括起来并为属性使用双引号值.但同样,这是对你来说最有意义的风格.

最后,上述两个问题都是导致streamName传递给函数的参数不起作用的原因,因为在你到达那一行之前很久就遇到了很多错误.如果你保持字符串问题,那么

lines += "'file': 'onSaveOk(" + streamName + ")'";
Run Code Online (Sandbox Code Playgroud)

应该按照你想要的方式工作.

注意:我提出了关于a)使用document.write()和b)使用<center>标签的强制性警告,但你应该花点时间对这两个问题进行一些研究; 我只会说1998年打电话说,"这很酷,我不想让那些人回来".