首页 > 解决方案 > Chrome 扩展 - 在全局变量和本机消息传递端口方面迁移到 V3

问题描述

我刚开始查看 V3 清单要求并有以下问题。

  1. 我目前在我的 background.jsvar 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 一起使用的东西吗?

  2. 我使用本地消息传递主机。我在后台启动时调用 chrome.runtime.connectNative 并保持端口打开,这意味着 Google Chrome 启动的 Native Host 也会运行。我找不到任何关于本机消息应该如何与服务人员一起工作的信息。chrome.runtime.connectNative 对服务人员有用吗?本地主机会随着 service worker 启动和停止吗?如果确实如此,任何本机代码如何向扩展发送消息?

  3. 以下策略是个好主意吗?具有背景“持久”的 Manifest V2:false 是否与服务人员相同?换句话说,我可以先让我的代码在具有非持久性 background.js 的 V2 中运行,而不是对 V3 进行重大更改吗?

  4. 我的本地主机将一些 javascript 传递给我的扩展程序,而我的扩展程序又通过脚本标记添加它。我在 V3 中读到,外部源无法检索 javascript。有没有人从谷歌看到本地主机是否会被视为外部来源?一方面,我当然可以看到,根据定义,本地主机代码是外部的,但是,与从某些外部 url 获取代码的扩展相比,本地主机(至少对于 Windows PC)具有更高的安装标准和用户权限要求. 这就是我提出问题的原因。

  5. 有人知道何时会拒绝 V2 更新吗?

标签: google-chrome-extension

解决方案


TL;DR ManifestV3 仍然是一个半破玩具,无法处理许多重要的场景。

每次我需要一个来自设置的值时,我都需要使用 V3,我需要使用 chrome.storage

  • 是的。

    如果您的数据对象不大,那应该不是问题。
    如果有疑问,请使用 devtools 分析器或performance.now()在您的代码中测量影响。

本机消息传递主机

具有背景“持久”的 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 团队在过去五年中实际上忽略了扩展作者的大部分反馈,这并不完全令人鼓舞。 ..


推荐阅读