1

我最近从事一个项目,该项目需要我从 .js 文件中读取 javascript 代码并将其嵌入 HTML 代码的脚本标签中。我认为这是一项微不足道的任务,直到我了解到某些在 .js 文件中不会导致问题的序列,如果嵌入在 HTML 文件的脚本标签中,可能会导致不需要的功能。

例如,如果具有有效 javascript 代码的 .js 文件包含以下序列:

/*
    ...comments...
    Add the following to your HTML:
    <script language="javascript" src="samplejs.js"></script>
    ...comments...
 */

...然后这些序列,当嵌入 HTML 文件的脚本标签中时,会在解释器命中该行时引起问题

"<script language="javascript" src="samplejs.js"></script>"

(至少在 Firefox 中是这样。)

由于正则表达式...

"\<script.*\>.*\</script\>"

...将捕获脚本标签,即使它们作为字符串文字的一部分出现。IE:

document.write('<div><script>doSomething()</script></div>')

...解决问题的方法是更强大的正则表达式(类似于

"/\*.*\<.*\>.*\</.*\>.*\*/"

...),还是不同的方法?

(假设删除所有评论不是一种选择)

4

3 回答 3

1

对你来说最简单,最省力?我会在进入的过程中通过诸如 UglifyJS 之类的缩小器来运行它,它应该会删除其他内容中的注释。

于 2013-01-24T19:13:32.300 回答
1

我想不出通过ajax读取文件并将它们写入标签的理由,但是如果您使用正确的方法(例如或分配给//属性)<script>应该没有问题。createTextNodetexttextConentinnerText

但是,如果您正在使用document.write,您当然需要转义其中的任何 HTML。这意味着用<>&"它们各自的实体替换。

于 2013-01-24T19:58:20.173 回答
0

你可以用 替换所有实例</script>\u003C/script>?理论上这不会影响字符串(因为'\u003C' == '<'),但它会防止浏览器误解注释(/*\u003C/script>*/不会过早结束脚本块)。

由于看起来这都是自动化的,我假设稍微“修改”偶尔的字符串不会引起任何胃灼热。

于 2013-01-24T19:01:29.347 回答