想要做个搜索框,支持简易的数学计算,比如 100+100 。
想着用 evel 来做应该足够简单,就是不知道是否够安全。 如果够安全,似乎开可以开放一些函数,提供 context 供用户自己写点具体的东西。 比如让用户自定义搜索框的行为。
这段代码是从知乎的腾讯云技术社区发的文章里拿来的。
模块:
const codeProxies = new WeakMap();
const compileCode = (content) => {
const code = new Function('context', `with(context) { ${content} }`);
return (data = {}) => {
if (!codeProxies.has(data)) {
codeProxies.set(data, new Proxy(data, {
has: () => true,
get: (target, key) => key === Symbol.unscopables ? void 0 : target[key],
}));
}
return code(codeProxies.get(data));
};
};
再次封装:
export const compileFunction = (context, code) => {
return compileCode(`
return (function() { ${code} }).call({});
`)(context);
};
使用:
try {
console.log(compileFunction({}, `return ${this.store.search};`));
} catch(error) {
console.log(error);
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.