externally_connectable

清单文件中的 externally_connectable 属性声明哪些扩展程序、应用和网页可以通过 runtime.connectruntime.sendMessage 连接到您的扩展程序。

有关消息传递的教程请参见跨扩展程序和应用的消息传递从网页中发送消息

没有声明 externally_connectable 时连接

如果您的扩展程序中没有声明 externally_connectable,所有扩展程序和应用都能连接,但是网页不能连接。当您更新您的清单文件使用 externally_connectable 时,如果没有指定 "ids": ["*"],其他所有扩展程序和应用都无法再连接到您的扩展程序,您并不一定期望这样的结果,所以请牢记这一点。

manifest.json 示例

{
  "name": "可以从外部连接的扩展程序",
  "externally_connectable": {
    // 扩展程序与应用的标识符。如果没有指定该字段,
    // 任何扩展程序或应用都无法连接。
    "ids": [
      "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
      "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
      ...
      // 或者如果要匹配所有扩展程序和应用,只需要指定 "*"。
      "*"
    ],
    // 网页的匹配表达式,不影响内容脚本。
    // 如果没有指定该字段,任何网页都无法连接。
    "matches": [
      "https://*.google.com/*",
      "*://*.chromium.org/*",
      ...
    ],
    // 表示扩展程序需要使用连接到它的网页的
    // TLS 通道标识符,网页也必须将 runtime.connect 的
    // connectInfo 或 runtime.sendMessage 的 options
    // 中的 includeTlsChannelId 设置为 true。
    "accepts_tls_channel_id": false
  },
  ...
}

参考

array of string (可选)
ids

允许连接的扩展程序或应用的标识符。如果为空或未指定,任何扩展程序或应用都不能连接。

通配符 "*" 允许所有扩展程序和应用连接。

array of string (可选)
matches

允许连接的网页的 URL 匹配表达式,并不会影响内容脚本。如果为空或未指定,任何网页都不能连接。

表达式不能包含通配符域名,也不能包含(有效)顶级域名的子域名。例如 *://google.com/*http://*.chromium.org/* 是有效的,但 <all_urls>http://*/**://*.com/* 甚至是 http://*.appspot.com/* 就不行。

boolean (可选)
accepts_tls_channel_id

如果为 true,并且调用 runtime.connectruntime.sendMessage 时请求 TLS 通道标识符,发送的消息会设置 runtime.MessageSender.tlsChannelId。如果为 false,在任何情况下都不会设置 runtime.MessageSender.tlsChannelId