首页 > 其他 > 详细

通过ES6实现个模板操作

时间:2021-02-09 18:03:52      阅读:16      评论:0      收藏:0      [点我收藏+]
const vm = require(‘vm‘);
const user = {
  name: ‘<script>xss</script>‘
}
//  中控
const templateMap = {
  templateA: ‘`<p>${include("templateB")}</p>`‘,
  templateB: ‘`<div>templateB</div>`‘
}
const context = {
  user,
  _: (v) => {
    var entry = { "‘": "&apos;", ‘"‘: ‘&quot;‘, ‘<‘: ‘&lt;‘, ‘>‘: ‘&gt;‘ };
    v = v.replace(/([‘")-><&\\\/\.])/g, function ($0) { return entry[$0] || $0; });
    return v;
  },
  include: (name)=>{
    return templateMap[name]()
  }
}

Object.keys(templateMap).forEach(key => {
  const temp = templateMap[key]
  templateMap[key] = vm.runInNewContext(`
    (function(){
      return ${temp}
    })
    `,context)
})

// let str = `<h2>${user.name}</h2>`;
// 把str 看作 eval(str)。需要有括号
const result = vm.runInNewContext("`<h2>${_(user.name)}</h2><h4>${include(‘templateA‘)}</h4>`", context);
console.log(‘result is:‘, result) 
// result is: <h2>&lt;script&gt;xss&lt;/script&gt;</h2><h4><p><div>templateB</div></p></h4>

 

通过ES6实现个模板操作

原文:https://www.cnblogs.com/liuyinlei/p/14393141.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!