use eval in chrome extension v3+
你可以通过引入本包从而实现在 chrome 插件 v3 版本中使用 eval
我们推荐你使用npm安装而不是yarn或者pnpm,因为chrome插件开发时(没有webpack/rollup时)如果使用pnpm这种软链接安装的包管理工具是会出问题的
npm i chrome-inject-eval{
  ...
  "content_scripts": [
    {
      ...
      "js": [
        "./node_modules/chrome-inject-eval/dist/umd.min.js",
        "./src/[your inject].js"
      ],
      ...
    }
  ],
  ...
}- 基本
const evil = evalCore.getEvalInstance(window);
evil("const a=1;");
console.log(a); // 1- 高阶
const { evalModule, transformCode } = evalCore;
const { Interpreter } = evalModule;
Interpreter.global = window;
const interpreter = new Interpreter();
// 现在你可以使用eval5的所有功能
interpreter.evaluate(transformCode("const a=1;"));
console.log(a); // 1chrome-inject-eval的导出对象有三个属性,其中evalModule本质上等于require("eval5"),而 transform 则是通过 babel 把字符串编译成 ES5 代码,所以如果想使用更多 eval 相关的功能,可以参考 eval5官网
const evil = require("eval5");
const { transform } = require("@babel/standalone");
const transformCode = (codeStr) =>
  transform(codeStr, { presets: ["env"] }).code;
const getEvalInstance = (obj) => {
  const interpreter = new evil.Interpreter(obj, {
    timeout: 1000,
  });
  return (codeStr) => interpreter.evaluate(transformCode(codeStr));
};
module.exports = {
  evalModule: evil,
  getEvalInstance,
  transformCode,
};