JSON chrome 打包应用中的架构验证

JSON schema validation in chrome packaged app

我想在我的 chrome 应用程序中使用 AJV JSON 模式验证器。 但是我得到了错误

EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "default-src 'self' blob: filesystem: chrome-extension-resource:".

它发生在

的执行过程中
var validate = ajv.compile(schema);

据我所知,AJV 使用动态代码生成和 eval() 来验证 JSON CSP.

禁止

有没有办法在 chrome 应用程序中使用 AJV?

或者是否有其他 JSON 模式验证器可用于 chrome 应用程序?

如果您要使用的某些库与 Chrome CSP 不兼容,那么您可以 use it inside a sandbox.

这是well documented, and has a concrete example and a whole dedicated article "Using eval in Chrome Extensions. Safely."

缺点是您不能编写同时使用 Chrome API 和库的代码。您需要将其分开并在两个脚本之间进行通信。

我最近实现了使用 ajv-cli 将模式预编译为独立模块的选项。这样你就可以完全避免使用代码生成和函数构造函数,所以你将简单地遵守你的 CSP。

尽管与 Ajv 本身可以完成的工作相比 limitations,但涵盖了大多数用例。