除了缓存和检索其他答案引起的问题外,我还要强调另一个更晦涩的问题:解析。
HTML中出现的JavaScript可能会遇到解析问题,例如以下示例:
<html>
<head>
<script>
function myfunc() {
if ("</style> isn't a problem")
return "but </script> is"
}
</script>
<style>
body::after {
content: '</script> is okay, but not </style>'
}
</style>
</head>
<body>
<script>document.write(myfunc())</script>
</body>
</html>
...这意味着您必须转换脚本以转义一些在HTML中触发的字符。当您将CSS和JavaScript作为外部资源提供时,此问题就消失了,因为它们不再需要考虑“父”解析上下文。
如果您以XML形式提供内容,则可以使用CDATA部分来解决此问题。但是,CDATA也存在类似的问题:
<?xml version="1.0" encoding="utf-8"?>
<html>
<head>
<script>
// <![CDATA[
function myfunc() {
if ("</script> is no longer a problem")
return "but ]]> is"
}
// ]]>
</script>
<style>
<![CDATA[
body::after {
content: 'same ]]> issue here'
}
]]>
</style>
</head>
<body>
<script>document.write(myfunc())</script>
</body>
</html>
班轮要当心。