将</script>
在JavaScript字符串litteral内部由HTML解析器关闭标签的解释,从而导致意外的行为(见例如上的jsfiddle)。
为避免这种情况,您可以将javascript放在注释之间(这种编码风格是一种常见的做法,早在浏览器之间对Javascript的支持不佳的情况下)。这将起作用(请参阅JSFiddle中的示例):
<script type="text/javascript">
<!--
if (jQuery === undefined) {
document.write('<script type="text/javascript" src="http://z-ecx.images-amazon.com/images/G/01/javascripts/lib/jquery/jquery-1.2.6.pack._V265113567_.js"></script>');
}
// -->
</script>
...但是说实话,使用document.write
并不是我认为的最佳做法。为什么不直接操作DOM?
<script type="text/javascript">
<!--
if (jQuery === undefined) {
var script = document.createElement('script');
script.setAttribute('type', 'text/javascript');
script.setAttribute('src', 'http://z-ecx.images-amazon.com/images/G/01/javascripts/lib/jquery/jquery-1.2.6.pack._V265113567_.js');
document.body.appendChild(script);
}
// -->
</script>
\/
是有效的转义序列/
,那么为什么不使用它代替那些字符串文字转义<
呢?例如document.write('<script src=foo.js><\/script>');
。而且,</script>
不是唯一可以关闭<script>
元素的字符序列。一些更多的信息在这里:mathiasbynens.be/notes/etago