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

Posted

技术标签:

【中文标题】Javascript document.write(\'HTML CODE HERE\') 并使用 flash 抓取的 var【英文标题】:Javascript document.write('HTML CODE HERE') and using a var grabbed by flashJavascript document.write('HTML CODE HERE') 并使用 flash 抓取的 var 【发布时间】:2012-10-10 00:50:21 【问题描述】:

所以这是两个问题合二为一。我的第一个问题是我该怎么做?

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

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

这是我的问题的第二部分,当闪存录像机完成保存录制的视频时,此功能运行。它从 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>
');


    

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

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

我该怎么做?谢谢。

【问题讨论】:

【参考方案1】:

首先,JavaScript 不允许多行字符串,因此您的document.write 会立即抛出语法错误。你至少有几种方法可以解决它。您可以删除换行符,使整个字符串成为单行...

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

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

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

...它更具可读性,但可能有点脆弱——反斜杠后面的任何尾随空格都会在不明显的情况下破坏它。接下来,您可以一次将字符串连接一行...

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

...认为这在一定程度上缓解了第一种方法的可读性问题和第二种方法的脆弱性问题。最后,您可以创建一个字符串数组并将它们连接起来......

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

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

注意:我前面提到了关于 a) 使用 document.write() 和 b) 使用 &lt;center&gt; 标记的强制性警告,但是您应该花一些时间对这两个标签进行一些研究问题;我只想说 1998 年打来电话说:“这很酷,反正我不想让他们回来”。

【讨论】:

【参考方案2】:

派对迟到了,我其实更喜欢:

//启动html

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

有效的 javascript 'foo'+\n\r\t'bar' == 'foobar';

【讨论】:

以上是关于Javascript document.write('HTML CODE HERE') 并使用 flash 抓取的 var的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript-输出内容(document.write)

如何让使用 document.write() 创建的 JavaScript 执行?

JavaScript document.write Chrome

JavaScript中4种document.write()输出展示

JavaScript 判断一个字符串是否数字

JavaScript eval() 函数