为什么要在渲染局部之前进行escape_javascript?

我正在看这个Railscast插曲,想知道为什么在escape_javascript这里需要致电:


$("#reviews").append("<%= escape_javascript(render(:partial => @review)) %>");

有什么escape_javascript用?


根据Rails的文档:


escape_javascript(javascript)


转义符返回以及JavaScript段的单引号和双引号。


但这对我来说意义不大。


凤凰求蛊
浏览 835回答 3
3回答

Helenr

是否因为您不希望用户发布浏览器实际执行的JavaScript?

qq_花开花谢_0

如果您在这里查看源代码,它将更加清晰。此功能完成以下两件事:它将输入字符串中的字符替换为JS_ESCAPE_MAP中定义的字符这样做的目的是确保javascript代码正确序列化,而不会干扰嵌入它的外部字符串。例如,如果您的JavaScript字符串用双引号引起来,则字符串文字中的所有引号都必须用单引号引起来,以免破坏代码。该函数还检查结果字符串是否为html安全。如果不是,则进行必要的转义以确保该字符串变为html安全并返回结果。当您使用escape_javascript时,通常会动态地将其嵌入到另一个字符串或现有的html中。您需要确保这样做不会使整个页面无法呈现。其他回复中指出了此回复的某些方面,但我想将所有内容放在一起,包括javascript转义和html转义之间的区别。此外,一些响应暗示此功能有助于避免脚本注入。我认为这不是此功能的目的。例如,在您的评论中,如果您的评论具有警报(“嗨,那里”),则仅将其附加到节点将不会触发弹出窗口。您没有将其嵌入在页面加载或通过其他事件触发的函数中。仅将alert('hi there')作为您的html的一部分并不意味着它将作为javascript执行。话虽如此,但我并不否认不可能进行脚本注入。但是要避免这种情况,在获取用户数据并将其存储在数据库中时需要采取步骤。您提供的功能和示例与呈现已保存的信息有关。希望这对您有所帮助。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript
Ruby