如何在Golang的html/template中注入JavaScript?
在Golang html/template中注入JavaScript变量的解决方案
Go的html/template默认会对所有字符串进行HTML转义(目的是防范XSS攻击),所以你直接传入的脚本字符串会被当作普通文本处理,出现被引号包裹的情况。要实现正常注入脚本,需要明确告诉模板该内容是安全的HTML,无需转义,具体有两种方法:
方法一:修改结构体字段类型
将myObject结构体中Script字段的类型从string改为template.HTML:
import "html/template" type myObject struct { Script template.HTML }
后续传入模板时,模板会识别这是安全的HTML内容,直接渲染而不转义。
方法二:传参时转换类型
如果不想修改结构体定义,可以在传入模板执行时,把字符串手动转换为template.HTML类型:
// 结构体传参的情况 return tmpl.Execute(writer, myObject{ Script: template.HTML("<script>console.log('Hello World!');</script>"), }) // 或者用map传参 return tmpl.Execute(writer, map[string]interface{}{ "myScript": template.HTML("<script>console.log('Hello World!');</script>"), })
效果验证
修改后渲染的HTML会符合你的期望:
<head> <script>console.log('Hello World!');</script> </head>
此时浏览器会正常执行脚本,控制台将输出Hello World!。
⚠️ 注意:只有当你完全信任注入的脚本内容时才使用此方法,避免传入不可信的用户输入,防止XSS安全风险。
内容的提问来源于stack exchange,提问作者Vhndaree
相关产品推荐
相关产品推荐

