google-chrome-extension - Chrome 扩展 - 在全局变量和本机消息传递端口方面迁移到 V3
问题描述
我刚开始查看 V3 清单要求并有以下问题。
我目前在我的 background.js
var settings = new usersettings();
用户设置中从 chrome.storage.local 获取所有设置一次,然后如果设置属性发生更改,则将其保存回存储。我是否正确理解 V3 每次我需要从我需要使用的设置中获取一个值,例如 chrome.storage?此外,检索存储的唯一方法是/将是以下;
chrome.storage.local.get(['key'], function(result) { console.log('Value currently is ' + result.key); });
我不是专业的软件工程师,但每次我需要读取布尔设置时使用上面的代码似乎效率很低,而且不仅会减慢扩展速度,还会创建更多代码。我读到 V3 将利用 Promise,这是可以与 chrome.storage.local.get 一起使用的东西吗?
我使用本地消息传递主机。我在后台启动时调用 chrome.runtime.connectNative 并保持端口打开,这意味着 Google Chrome 启动的 Native Host 也会运行。我找不到任何关于本机消息应该如何与服务人员一起工作的信息。chrome.runtime.connectNative 对服务人员有用吗?本地主机会随着 service worker 启动和停止吗?如果确实如此,任何本机代码如何向扩展发送消息?
以下策略是个好主意吗?具有背景“持久”的 Manifest V2:false 是否与服务人员相同?换句话说,我可以先让我的代码在具有非持久性 background.js 的 V2 中运行,而不是对 V3 进行重大更改吗?
我的本地主机将一些 javascript 传递给我的扩展程序,而我的扩展程序又通过脚本标记添加它。我在 V3 中读到,外部源无法检索 javascript。有没有人从谷歌看到本地主机是否会被视为外部来源?一方面,我当然可以看到,根据定义,本地主机代码是外部的,但是,与从某些外部 url 获取代码的扩展相比,本地主机(至少对于 Windows PC)具有更高的安装标准和用户权限要求. 这就是我提出问题的原因。
有人知道何时会拒绝 V2 更新吗?
解决方案
TL;DR ManifestV3 仍然是一个半破玩具,无法处理许多重要的场景。
每次我需要一个来自设置的值时,我都需要使用 V3,我需要使用 chrome.storage
是的。
如果您的数据对象不大,那应该不是问题。
如果有疑问,请使用 devtools 分析器或performance.now()
在您的代码中测量影响。
本机消息传递主机
它现在坏了。
我看到一个有点相关的https://crbug.com/1030305但也许你应该打开一个新问题。
具有背景“持久”的 Manifest V2:false 是否与服务人员相同?
是的,从概念上讲。
但是,由于 service worker 的劣势可能会有所不同,因为这仍然是一种不成熟的 Web 技术,因此它不支持我们习惯的东西,例如动态脚本加载、ES 模块、剪贴板处理、DOM 解析和更多。
我可以先让我的代码在具有非持久性 background.js 的 V2 中运行,而不是对 V3 进行重大更改吗?
- 是的,这是一个好的开始,特别是因为 ManifestV3 仍在开发中。
我的本地主机将一些 javascript 传递给我的扩展程序,而我的扩展程序又通过脚本标记添加它。
绝对禁止。
此代码不是扩展包的一部分,因此无法由网上商店审阅者验证。
当 Chromium 团队宣布他们的 Tampermonkey 解决方案和允许安装外部用户脚本的类似扩展时,将揭示一个替代方案。
同时,尝试切换到声明性方法:在 JSON 中创建规则定义,这些定义将由您的扩展代码处理。
何时会拒绝 V2 更新?
应该是明年吧
目前还没有官方公告,但如果 Chromium 开发人员有一点良心,他们不会禁用 ManifestV2,直到他们修复 V3 中的所有或大部分问题,这可能会在明年发生。
尽管目前几乎没有针对 ManifestV3 问题的积极开发(其他领域,例如 DevTools 看到的有意义的活动增加了约 100 倍),并且看到 Chromium 团队在过去五年中实际上忽略了扩展作者的大部分反馈,这并不完全令人鼓舞。 ..
推荐阅读
- regex - Python re, 获取 findall 找到的第一个元素
- javascript - 如何创建一个foreach循环来反向打印数组?
- javascript - 如何在动态组件标签内重用vue中的组件?
- javascript - 基于 JSON 对象时如何使用 ASP 更新 URL 地址
- assembly - 两个输入并将它们相乘。如何做到这一点?
- react-native - 反应原生图像背景不是全屏
- discord - 是否可以在不和谐中使用功能性前缀文本?像悬停或可点击
- c - C - memcpy with char * 长度大于源字符串长度
- sql - 如何创建从表中读取的动态视图?
- excel - 如何使用 Office JS API 在 Excel 中对行或列进行分组