所以这是两个问题合而为一。我的第一个问题是我如何做到这一点?
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录像机完成保存录制的视频时,此函数会运行。它从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+")'
我该怎么做呢?谢谢。
发布于 2012-10-10 10:07:42
首先,JavaScript不允许多行字符串,因此您的document.write
会立即抛出一个语法错误。至少有几种方法可以做到这一点。您可以删除换行符,使整个字符串成为一行...
var lines = '<div id="jwplayer"><center>...</center></div>';
document.write(lines);
可读性较差的...but。或者你可以用反斜杠转义换行符...
var lines = '<div id="jwplayer">\
<center>\
...\
</center>\
</div>';
document.write(lines);
...which更具可读性,但可能有点脆弱--反斜杠后面的任何空格都会在不明显的情况下中断它。接下来,您可以将字符串连接起来,每次连接一行...
var lines = '<div id="jwplayer">';
lines += '<center>';
lines += '...';
lines += '</center>';
lines += '</div>';
document.write(lines);
...which我认为在某种程度上缓解了第一种方法的可读性问题和第二种方法的脆弱性问题。最后,您可以创建一个字符串数组并连接它们...
var lines = [
'<div id="jwplayer">',
'<center>',
'...',
'</center>',
'</div>'].join(' ');
document.write(lines);
在消除重复的lines += ...
方面,...which具有完全主观的优势。在任何情况下,这都不是一个详尽的方法列表,它主要归结为使用您最习惯的方法。
接下来,坦率地说,您的字符串是冲突的单引号和双引号的巨大混杂。如果您需要在字符串中包含与用于括起字符串的相同类型的引号,则需要对它们进行转义:
var lines = "<div id=\"jwplayer\">";
lines += '<div id=\'mediaplayer\'></div>';
显然(?)您可能希望将转义保持在最低限度,并且由于您要创建一个html字符串,因此您可能希望用单引号将这些字符串括起来,并对属性值使用双引号。但同样,这是对你来说最有意义的风格。
最后,上述两个问题都是导致传递给函数的streamName
参数不起作用的原因,因为在到达该行之前很久就已经遇到了许多错误。如果您保持字符串问题的正确性,那么
lines += "'file': 'onSaveOk(" + streamName + ")'";
它应该按照你想要的方式工作。
注意:我放弃了关于a)使用document.write()
和b)使用<center>
标签的强制性警告,但您应该花一些时间对这两个问题做一些研究;我只想说1998年打电话说,“那很酷,我无论如何都不想要那些东西了”。
发布于 2014-12-13 20:55:43
晚到派对上我更喜欢这样:
//启动html
var html = ''+
'<body>'+
'<div>'+
'<a href="foo.bar">Foo Bar page</a>'+
'</div>'+
'</body>';
有效的javascript‘foo’+\n\r\t‘’bar‘== 'foobar';
https://stackoverflow.com/questions/12810454
复制相似问题