1

无论如何,不​​涉及内联脚本。我有一个外部文件脚本,它从 twitter 获取一些 JSONP。假设在返回的 JSONP 中表示的对象的属性是一个字符串,其中某处包含 substring "</script>"。这会不会导致任何问题,而不会被添加到 DOM 中?(在那之前它会被擦洗干净。)

我不明白为什么会这样,但是 HTML 解析是出了名的古怪和古怪,所以谁知道呢?我知道如果你想在内联脚本中有一个字符串文字,你需要把它分解,就像var slashScriptContainingString = 'foo</scr' + 'ipt>bar'; 再一次,我觉得它应该没问题,但只是检查是否有人知道为什么它可能不是。

<!doctype html>
<script src="file.js"></script>

文件.js:

var f = function(twobj) {
  console.log(twobj);
  doOtherStuffWith(twobj);
}

<script src="https://api.twitter.com/statuses/user_timeline/user.json?callback=f"></script>

返回 JSONP:

f(["this is an object, returned as part of the JSONP response, except it contains a string literal with the substring \"</script>\".  Is this a problem? Note: I haven't said anything about injecting this string in the DOM in any way shape or form. I can't think of a reason why it might be, but I'd just like to be sure."]);
4

1 回答 1

2

不,字符串文字可以包含您想要的任何内容。只要您不盲目地尝试设置innerHTML某些东西,字符串就是字符串。您发布的示例是安全的。

您需要在 JavaScript 源代码中拆分</script>标签的原因是您缺少 CDATA 块。如果没有它们,从技术上讲,内联 JavaScript 中的所有内容都需要为 HTML 正确转义。(<变成&lt;等)浏览器对你很好,让它滑动,但</script>内联 JavaScript 变得模棱两可。您应该使用 CDATA 块来防止这样的事情发生。

<script type="text/javascript">
//<![CDATA[
...code...
//]]>
</script>

有关更多详细信息,请参阅此问题: 脚本标记中何时需要 CDATA 部分?

于 2012-09-30T06:31:13.967 回答