我正在看这个Railscast插曲,想知道为什么在escape_javascript这里需要致电:$("#reviews").append("<%= escape_javascript(render(:partial => @review)) %>");有什么escape_javascript用?根据Rails的文档:escape_javascript(javascript)转义符返回以及JavaScript段的单引号和双引号。但这对我来说意义不大。
3 回答
qq_花开花谢_0
TA贡献1835条经验 获得超7个赞
如果您在这里查看源代码,它将更加清晰。
此功能完成以下两件事:
它将输入字符串中的字符替换为JS_ESCAPE_MAP中定义的字符
这样做的目的是确保javascript代码正确序列化,而不会干扰嵌入它的外部字符串。例如,如果您的JavaScript字符串用双引号引起来,则字符串文字中的所有引号都必须用单引号引起来,以免破坏代码。
该函数还检查结果字符串是否为html安全。如果不是,则进行必要的转义以确保该字符串变为html安全并返回结果。
当您使用escape_javascript时,通常会动态地将其嵌入到另一个字符串或现有的html中。您需要确保这样做不会使整个页面无法呈现。
其他回复中指出了此回复的某些方面,但我想将所有内容放在一起,包括javascript转义和html转义之间的区别。此外,一些响应暗示此功能有助于避免脚本注入。我认为这不是此功能的目的。例如,在您的评论中,如果您的评论具有警报(“嗨,那里”),则仅将其附加到节点将不会触发弹出窗口。您没有将其嵌入在页面加载或通过其他事件触发的函数中。仅将alert('hi there')作为您的html的一部分并不意味着它将作为javascript执行。
话虽如此,但我并不否认不可能进行脚本注入。但是要避免这种情况,在获取用户数据并将其存储在数据库中时需要采取步骤。您提供的功能和示例与呈现已保存的信息有关。
希望这对您有所帮助。
添加回答
举报
0/150
提交
取消