在清单文件中定义存储区

localsync 存储区不同,您需要以 JSON 架构的形式声明 managed 存储区的结构,Chrome 浏览器会严格地检验。该架构必须存放在清单文件 "storage" 键下 "managed_schema" 属性指定的文件中,声明扩展程序支持的企业策略。

策略与选项类似,但是是由系统管理员而不是用户配置的,允许您预先为组织中的所有用户配置扩展程序。有关 Chrome 本身的例子,请参见 Chrome 浏览器对策略的处理方式

策略声明后,可以通过 storage.managed API 读取。强制实施管理员配置的策略是扩展程序的职责。

示例 manifest.json

storage.managed_schema 属性指定扩展程序中包含策略架构的文件。

{
  "name": "我的企业extension",
  "storage": {
    "managed_schema": "schema.json"
  },
  ...
}

Chrome 浏览器会从下层操作系统加载这些策略,对于已登录的用户还会从 Google Apps 加载策略。每当检测到策略更改时就会产生 storage.onChanged 事件,如果扩展程序使用事件页面的话,还包括浏览器不在运行的时候。您可以在 chrome://policy 检查 Chrome 浏览器加载的策略。

架构格式

Chrome 浏览器对 JSON 架构格式还有另外一些要求:

  • 顶层架构的类型必须为 object
  • 顶层 object 不能包含 additionalProperties,声明的 properties 为该扩展程序使用的策略。
  • 每一个架构要么包含 $ref 值,要么只有一种类型(type)。

如果架构无效,Chrome 浏览器不会载入扩展程序,并指出无法验证架构的原因。如果某个策略值没有遵循架构,它不会发布至 storage.managed API。

示例架构

{
  "type": "object",

  // "properties" 将对象可选的键映射至它的架构,
  // 在顶层对象中,这些键即为支持的策略名称。
  "properties": {

    // 策略名称 "AutoSave" 映射至它的架构,在以下
    // 例子中,将它声明为一个简单的布尔值。
    // "title" 和 "description" 是可选的,用来
    // 显示用户友好的名称以及提供给管理员的文档。
    "AutoSave": {
      "title": "自动保存更改。",
      "description": "如果设置为 true,更改会自动保存。",
      "type": "boolean"
    },

    // 支持的其他简单类型包括 "integer"(整型)、
    // "string"(字符串)和 "number"(数值)。
    "PollRefreshRate": {
      "type": "integer"
    },

    "DefaultServiceUrl": {
      "type": "string"
    },

    // "array" 为遵循某个架构的项目列表,在
    // "items" 中描述。遵循该架构的一个例子为
    // [ "one", "two" ]。
    "ServiceUrls": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },

    // 以下是一个更复杂的例子,描述书签列表,
    // 每一个书签包含 "title"(标题),可以拥有
    // "url" 或 "children" (子书签列表)。"id"
    // 属性用来为架构命名,其他架构可以通过
    // "$ref" 属性引用它。
    "Bookmarks": {
      "type": "array",
      "id": "ListOfBookmarks",
      "items": {
        "type": "object",
        "properties": {
          "title": { "type": "string" },
          "url": { "type": "string" },
          "children": { "$ref": "ListOfBookmarks" }
        }
      }
    },

    // "object" 可以包含已知属性,在 "properties"
    // 中列出,还可以包含可选的 "additionalProperties",
    // 表示 "properties" 中未列出的键使用的架构。
    // 以下例子可以将 URL 映射至它的设置,策略值的
    // 一个例子为:
    // {
    //   "youtube.com": {
    //     "blacklisted": true
    //   },
    //   "google.com": {
    //     "bypass_proxy": true
    //   }
    // }
    "SettingsForUrls": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "properties": {
          "blacklisted": { "type": "boolean" },
          "bypass_proxy": { "type": "boolean" }
        }
      }
    }
  }
}