为什么chrome.runtime不能由http定义,但是可以通过https

时间:2018-09-04 08:33:14

标签: google-chrome-extension

当我在devtool上调试javaScript时。

   chrome.runtime

请参阅“ http://www.qq.com”,其中显示: chrome.runtime未定义。参见http preview

但是当我在https站点(https://www.qq.com)上调试它时,它工作正常。参见https preview

提示:所有脚本都在顶部框架上运行。

我可以更改“ chorme:flags”以启用它吗?

1 个答案:

答案 0 :(得分:1)

我现在知道为什么了。

未安装扩展程序时,不存在“ chrome.runtime.sendMessage”。-自chrome 66+起。 参见:https://bugs.chromium.org/p/chromium/issues/detail?id=835287

  

rdevlin .... @ chromium.org于4月25日发表的第29条评论   这些情况来自伪造的错误,我认为这是由于修订引起的   39f8939309fe39bccc17fa1280b6c7f25c411947。这修改了   cryptotoken组件扩展的externally_connectable属性   (自动内置于Chrome中)仅接受传入的连接   来自https URL,而以前是所有URL。何时设定   对于所有网址,chrome.runtime.sendMessage将始终可用   因为任何URL都可能会向加密令牌发送消息   组件扩展。

     

但是,这按预期工作。仅加密令牌扩展   接受来自https来源的连接(因此其他任何   忽略),并且向其他任何扩展名发送消息都需要   接收扩展以在externally_connectable中列出URL   选项。此外,这意味着之前任何扩展都依赖   这种行为很可能无法发送消息,但是   异步完成(一旦消息未能找到合适的   接收器),而不是同步(因为未定义运行时)。如果   该扩展名在externally_connectable中列出该URL,然后   chrome.runtime应该仍然存在。如果扩展名没有   在external_connectable中列出网站,然后chrome.runtime   可用是预期的行为。

     

是否存在未定义chrome.runtime的情况   非沙盒式chrome-extension://页面,或用于其中   已安装的扩展程序在   清单的externally_connectable字段?如果是这样,请附上   扩展程序演示了此问题。如果没有,听起来像是   WAI。

修复:使用清单清单添加一个引文。

"externally_connectable": {
    "ids": [
      "*"
    ],
    "matches": [
      "http://test.yoursite.in:9090/*",
      "*://*.chromium.org/*"
    ]
  },

全部考虑。