google-chrome-extension - 为什么 http 未定义 chrome.runtime 但 https 可以正常工作
问题描述
当我在 devtool 上调试 javaScript 时。
chrome.runtime
参见“ http://www.qq.com ”,它显示: chrome.runtime 未定义。 请参阅http 预览。
但是当我在 https 站点(https://www.qq.com)上调试它时,它工作正常。见https 预览。
提示:所有脚本都在顶部框架上运行。
我可以更改“chorme:flags”来启用它吗?
解决方案
我现在知道为什么了。
没有安装扩展时,“chrome.runtime.sendMessage”不存在。---因为 chrome 66+。见:https ://bugs.chromium.org/p/chromium/issues/detail?id=835287
rdevlin 发表的第 29 条评论....@chromium.org,4 月 25 日 对于这些被欺骗的错误中的至少一些案例,我认为这是由修订版 39f8939309fe39bccc17fa1280b6c7f25c411947 引起的。这修改了 cryptotoken 组件扩展(自动内置在 Chrome 中)的 externally_connectable 属性,以仅接受来自 https URL 的传入连接,而之前它是所有 URL。当它设置为所有 URL 时,chrome.runtime.sendMessage 将始终可用,因为任何 URL 都可能向加密令牌组件扩展发送消息。
但是,这是按预期工作的。cryptotoken 扩展只接受来自 https 源的连接(因此任何其他的都将被忽略),并且向任何其他扩展发送消息需要接收扩展在 externally_connectable 选项中列出 URL。此外,这意味着以前任何依赖此行为的扩展都可能无法发送消息,而是异步发送(一旦消息未能找到合适的接收者)而不是同步发送(因为运行时未定义)。如果扩展在 externally_connectable 中列出了 URL,那么 chrome.runtime 应该仍然存在。如果扩展程序未在 externally_connectable 中列出该站点,则 chrome.runtime 不可用是预期行为。
对于非沙盒化 chrome-extension:// 页面或已安装扩展程序在清单的 externally_connectable 字段中指定该网页的 URL 的网页,是否存在未定义 chrome.runtime 的情况?如果是这样,请附上演示此问题的扩展。如果不是,这听起来像是 WAI。
修复:使用:manifest 添加一个扩展。
"externally_connectable": {
"ids": [
"*"
],
"matches": [
"http://test.yoursite.in:9090/*",
"*://*.chromium.org/*"
]
},
认为所有。
推荐阅读
- date - MS Access表单基于日期的文本框条件格式未按预期工作
- arcgis-js-api - ArcGIS Online:使用托管要素图层数据动态填充现有表单
- python - 如何在 keras pad_sequences 中修复“零大小数组以减少操作最大值,没有身份”
- python - NLP - 在评估期间使用分离时出错
- docker - 在 ~/.docker/config.json 文件中设置 'auths' 以提取私有 docker 映像
- android - 如何在firestore中登录多用户?
- typescript - 如何通过详尽的 switch-case 语句获得一致的返回?
- python - 排序多索引数据框保持索引排序
- javascript - Discord - 获取服务器信息
- javascript - 触发点击事件时设置模型值