正确的javascript“src”声明语法

时间:2011-10-04 16:51:00

标签: javascript

尝试将math.random()方法添加到我的嵌入式js声明中,以防止链接的javascript文件被缓存。

问题是我不断收到语法错误。我想我很接近,但我的调试工作证明是徒劳的。代码如下:

<script type="text/javascript">
document.write("<script src='links7.js?'+Math.random()+></script>");
</script>

有什么建议吗?

4 个答案:

答案 0 :(得分:2)

问题#1

逃逸/编码

当HTML解析器找到<script>时,它将开始解析内容,直到找到</script>中出现的内容:

document.write("<script src='links7.js?'+Math.random()+></script>

因此,您需要更改源代码,以便它不会被解析为脚本元素的结尾:

document.write("<script src='links7.js?'+Math.random()+></scri" + "pt>");

理想情况下,您可以使用HTML转义所有内联JavaScript代码,这也可以缓解此问题:

document.write(&quot;&lt;script src='links7.js?'+Math.random()+&gt;&lt;/script&gt;&quot;);

但老实说,这样做非常烦人非常快

在内联JavaScripts中转义所有字符内容的更好方法是使用CDATA(字符数据)元素:

<script type="text/javascript">
  <![CDATA[
  document.write("<script src='links7.js?'+Math.random()+></script>");
  ]]>
</script>

当然,因为CDATA元素在<script>元素内,所以JS解析器尝试将其作为代码执行,并且不知道如何使用{{1}这样的语法为了解决这个问题,你需要将< ! [ CDATA [元素包装在JS注释中:

CDATA

我推荐第二种形式,使用多行注释,这样如果由于某种原因错误地解析了空格,那么代码就不会出现任何问题(我已经看到一些内容管理系统在其富文本编辑器中删除了新行) )。

<script type="text/javascript"> //<![CDATA[ -or- /* <![CDATA[ */ //]]> -or- /* ]]> */ </script> 的另一个警告,CDATA元素,就像CDATA元素一样,停止将其内容包装在其结束标记的第一个符号(script) ,所以要小心避免写下类似的内容:

]]>

因为它会杀死你的lorem = ipsum[dolor[sit]]>amet; 元素。

要避免所有这些问题,请尽可能将JavaScripts保存在其所属的外部CDATA文件中。

我理解简单的单行文件可能最好避免使用外部文件,在这种情况下,您应该使用.js元素,甚至使用HTML来转义JavaScript。

问题#2

报价

您提供给<![CDATA[ ]]>的字符串:

document.write

格式不正确,无法执行除document.write("<script src='links7.js?'+Math.random()+></script>");

的静态字符串以外的任何操作

如果你想执行<script src='link7.js?'Math.random()+></script>,你需要先输入一个字符串,然后输入一个字符串:

Math.random()

您可能会注意到我交换了'<script src="links7.js?' + Math.random() + '"></script>' '的使用情况。我通常希望在HTML属性中使用",并且讨厌必须转义"文字,因此我尽可能经常使用\"作为字符串文字JS。

此外,您应该注意'属性的开始和结束报价。 DOM可能能够很好地猜测属性何时何地结束,但不要推送它以防万一它会导致代码中的某些破坏。

答案 1 :(得分:1)

一步一步:
从您想要的代码开始:

<script src="links7.js?89736459827345"></script>

然后把它放在一个文字字符串中:

'<script src="links7.js?89736459827345"></script>'

将随机部分隔离在一个单独的字符串中:

'<script src="links7.js?' + '89736459827345' + '"></script>'

用随机表达式替换随机部分:

'<script src="links7.js?' + Math.random() + '"></script>'

在结束脚本标记中添加一些东西,以免它弄乱它将进入的脚本标记:

'<script src="links7.js?' + Math.random() + '"></scr' + 'ipt>'

将其置于document.write来电:

document.write('<script src="links7.js?' + Math.random() + '"></scr' + 'ipt>');

围绕它的脚本标记:

<script type="text/javascript">
document.write('<script src="links7.js?' + Math.random() + '"></scr' + 'ipt>');
</script>

答案 2 :(得分:0)

您的打开/关闭引号存在问题。尝试:

document.write("<script src='links7.js?" + Math.random() + "'></script>");

答案 3 :(得分:0)

<script type="text/javascript">
document.write("<script src='links7.js?" + Math.random() + "'></script>");
</script>

建议:使用带代码突出显示的IDE。