$("body").append( "<p id='Zoom'>Send to: <b>"
+ full + "</b> <div id='fb-root'></div><script src='http://connect.facebook.net/en_US/all.js#xfbml=1'></script><fb:send href='"
+ link + " font='' colorscheme='dark'></fb:send><br> <textarea cols='40' rows='7'>"
+ msg + "</textarea></p>"
);
此JavaScript代码有什么问题?我不能在""
之间有一个脚本块吗?我该如何解决这个问题?
答案 0 :(得分:4)
通常做这样的事情:
"<scr" + "ipt>...</scr" + "ipt>";
答案 1 :(得分:3)
在脚本块中包含字符序列</script
将结束脚本块。 HTML解析器对JavaScript字符串文字语法一无所知,他们只是说<script>
开始标记和之后的第一个</script>
结束标记之间的所有内容都是脚本元素。
使用'<\/script>'
或'\x3C/script>'
或类似内容,避免将<
和/
个字符放在一起。你也经常看到unescape('%3C/script>')
,但这是一个非常毫无意义的迂回方式。 '</scr'+'ipt'
也很常见,但无效;从技术上讲,即使只是两个字符的序列</
(ETAGO)也应该结束脚本块,但浏览器通常会给你一些自由度。 '<'+'/script'
有效。
然而,正如帕特里克所说,将<script>
元素写入innerHTML
(正如你在jQuery的append()
中所做的那样)不起作用(并没有多大意义) 。通常情况下,最好使用类似DOM的方法向页面添加元素,并getScript
动态加载脚本,但是对于这样的第三方脚本,不确定是否可行。例如,如果外部脚本依赖于document.write
,则永远不可能动态加载它。其他人可能会因为寻找自己的脚本标签而被绊倒。可能需要进行一些反复试验。
"<textarea cols='40' rows='7'>"+msg+"</textarea>"
不要做这样的事情。在不转义<&"
的情况下将文本转换为HTML字符串是XSS安全漏洞和错误的处方。 jQuery有很好的DOM风格的内容创建工具,使用它们,例如:
$('<textarea/>', {cols: 40, rows: 7, val: msg})
答案 2 :(得分:2)
你有几个问题。
<script>
个元素。<div>
元素(或其他display:block
元素)嵌套在<p>
元素中。将<div>
更改为内联元素,并使用jQuery.getScript()
[docs]方法加载脚本。
答案 3 :(得分:1)
如果您要在JS中使用HTML标记,则应将JS括在CDATA
块中。
<script type="text/javascript">
// <![CDATA[
$("body").append( '<p id="Zoom">Send to: '
+ '<b>' + full + '</b>'
+ '<div id="fb-root"></div>'
+ '<script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script>'
+ '<fb:send href="' + link + ' font="" colorscheme="dark"></fb:send>'
+ '<br><textarea cols="40" rows="7">' + msg + '</textarea>'
+ '</p>'
);
// ]]>
</script>
答案 4 :(得分:0)
完成Larsenal的回答,这可以工作:
$("body").append("<p id='Zoom'>Send to: <b>" + full + "</b> <div id='fb-root'></div><script src='http://connect.facebook.net/en_US/all.js#xfbml=1'></scr" + "ipt><fb:send href='" + link + " font='' colorscheme='dark'></fb:send><br> <textarea cols='40' rows='7'>" + msg + "</textarea></p>");