为什么chrome.runtime由http未定义但由https正常工作

问题描述 投票:0回答:1

当我在devtool上调试javaScript时。

   chrome.runtime

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

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

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

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

google-chrome-extension
1个回答
1
投票

我现在明白了。

没有安装扩展时,“chrome.runtime.sendMessage”不存在.---自Chrome 66+以来。见:https://bugs.chromium.org/p/chromium/issues/detail?id=835287

评论29作者:rdevlin .... @ chromium.org,4月25日对于至少其中一些来自被欺骗的bug的案例,我认为这是由修订版39f8939309fe39bccc17fa1280b6c7f25c411947引起的。这修改了cryptotoken组件扩展的external_connectable属性(自动内置到Chrome中),仅接受来自https URL的传入连接,而之前它是所有URL。当它设置为所有URL时,chrome.runtime.sendMessage将始终可用,因为任何URL都可能将消息发送到cryptotoken组件扩展。

但是,这是按预期工作的。 cryptotoken扩展仅接受来自https origin的连接(因此任何其他连接都将被忽略),并且向任何其他扩展发送消息将要求接收扩展在local_connectable选项中列出URL。此外,这意味着之前,依赖于此行为的任何扩展都可能无法发送消息,但是异步(一旦消息找不到合适的接收器)而不是同步(因为运行时未定义)。如果扩展程序在external_connectable中列出了网址,则chrome.runtime仍应存在。如果扩展程序未在external_connectable中列出该站点,则chrome.runtime不可用是预期的行为。

是否存在未为非沙盒chrome-extension://页面定义chrome.runtime的情况,或者对于已安装的扩展名在清单的external_connectable字段中指定该网页的URL的网页?如果是,请附上演示此问题的扩展程序。如果没有,这听起来像是WAI。

修复:使用:manifest添加一个扩展名。

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

全都想。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.