Nodejs 引用视图之前传入js弹出问题
Nodejs 引用视图之前传入js弹出问题
enter code here view[“alerts”]= “<script>alert(‘sucess’)</script>”;
res.render(“user/list”, view);
这种情况怎么办 弹不了
Node.js 引用视图之前传入 JS 弹出问题
问题描述
在使用 Node.js 和模板引擎(例如 EJS 或 Pug)渲染视图时,尝试通过传递包含 JavaScript 代码的字符串来实现页面加载时的弹窗提示,但发现弹窗并未正常显示。
示例代码
假设你正在使用 EJS 作为模板引擎,并且希望在用户列表页面加载时显示一个成功的弹窗提示。你可能尝试这样做:
// 在控制器或路由处理函数中
const view = {
alerts: "<script>alert('success')</script>"
};
res.render("user/list", view);
解决方案
原因分析
- 直接将
<script>
标签嵌入到字符串中传递给模板引擎通常不会按预期工作,因为模板引擎可能会对 HTML 进行转义,导致<script>
标签被错误地处理。
解决方案一:使用模板引擎的特殊语法
如果你使用的是 EJS 模板引擎,可以利用其特殊语法来避免转义:
// 在 EJS 模板文件中
<%- alerts %>
这里 <%-
表示不进行 HTML 转义,直接输出内容。
解决方案二:在模板文件中直接编写脚本
另一种方法是在模板文件中直接编写脚本逻辑,而不是通过后端传递:
<!-- 在 user/list.ejs 文件中 -->
<script>
document.addEventListener("DOMContentLoaded", function() {
alert('success');
});
</script>
这样,当页面加载完成时,会自动触发一个弹窗。
总结
直接通过后端传递包含 <script>
标签的字符串可能不会按预期工作,因为模板引擎会对 HTML 进行转义。可以使用模板引擎的特殊语法(如 EJS 中的 <%-
)来确保脚本正确执行,或者直接在模板文件中编写脚本逻辑。
check html source
你的 script tag 可能被 encoded. 看 html 源码就知道了。
在 Node.js 中,如果你希望在渲染视图之前传递一些 JavaScript 代码,并且期望它能正确执行,你需要确保这些代码能够被视图正确解析。在你的例子中,直接将 <script>
标签嵌入到字符串中可能不会按预期工作,因为视图引擎可能会对这些标签进行转义。
示例代码
假设你使用的是 EJS 作为视图引擎,你可以这样做:
- 定义数据对象并传递给视图:
const view = {
alerts: "alert('success')"
};
res.render("user/list", view);
- 在视图文件(例如
user/list.ejs
)中使用该变量:
<!DOCTYPE html>
<html>
<head>
<title>User List</title>
</head>
<body>
<% if (alerts) { %>
<script>
alert(<%- JSON.stringify(alerts) %>);
</script>
<% } %>
</body>
</html>
解释
- JSON.stringify:将 JavaScript 代码字符串安全地转换为可以嵌入到
<script>
标签中的格式。 - <%-:在 EJS 中,
<%-
表示输出内容而不进行 HTML 转义。这确保了<script>
标签不会被转义。
这样处理后,当页面加载时,JavaScript 代码会被解析并执行,从而触发 alert
函数。
如果你使用其他视图引擎(如 Pug、Handlebars 等),方法类似,只需要调整语法以适应相应的视图引擎。