chrome 打包应用程序中的 JSON 模式验证

Posted

技术标签:

【中文标题】chrome 打包应用程序中的 JSON 模式验证【英文标题】:JSON schema validation in chrome packaged app 【发布时间】:2016-04-18 17:11:26 【问题描述】:

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

EvalError: Refused to evaluate a string as javascript because 'unsafe-eval' is not a 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?

或者是否有其他一些可以在 chrome 应用中使用的 JSON 模式验证器?

【问题讨论】:

【参考方案1】:

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

虽然有 limitations 与 Ajv 本身可以做的相比,但大多数用例都涵盖了。

【讨论】:

更新了 ajv 7+ 的限制:github.com/ajv-validator/ajv/blob/master/docs/…【参考方案2】:

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

这是well documented,有一个concrete example和一篇完整的专文"Using eval in Chrome Extensions. Safely."

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

【讨论】:

具体的例子对我帮助很大。谢谢。

以上是关于chrome 打包应用程序中的 JSON 模式验证的主要内容,如果未能解决你的问题,请参考以下文章

在浏览器选项卡内运行 Chrome 打包应用程序

json 如何使用Chrome Identity API为Chrome扩展程序设置用户身份验证

chrome打包程序

Packer 无法验证 jenkins 作业中的 hcl2 模板

将 Chrome 打包应用程序链接到 Google Play 游戏

PostgreSQL 中的 JSON 模式验证?