尝试将math.random()方法添加到我的嵌入式js声明中,以防止链接的javascript文件被缓存。
问题是我不断收到语法错误。我想我很接近,但我的调试工作证明是徒劳的。代码如下:
<script type="text/javascript">
document.write("<script src='links7.js?'+Math.random()+></script>");
</script>
有什么建议吗?
答案 0 :(得分:2)
当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("<script src='links7.js?'+Math.random()+></script>");
但老实说,这样做非常烦人非常快。
在内联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。
您提供给<![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。