程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了您如何使用 manifest v3大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决您如何使用 manifest v3?

开发过程中遇到您如何使用 manifest v3的问题如何解决?下面主要结合日常开发的经验,给出你关于您如何使用 manifest v3的解决方法建议,希望对你解决您如何使用 manifest v3有所启发或帮助;

在 manifest v3 中删除了 BACkground.Js 机制,我正在寻找如何在后台执行周期性操作,因为它已经消失了。

这个升级指南说要使用Chrome alarm API: https://developer.chrome.com/docs/extensions/mv3/migraTing_to_service_workers/

具体来说:

相反,我们可以使用警报 API。与其他侦听器一样,警报侦听器应在脚本的顶层注册。

不清楚它需要是哪个脚本的顶级,但是当使用我的 Chrome 扩展程序的入口点时,“popup.Js”确实会定期执行,但仅当 Chrome 弹出窗口实际打开时才会执行。即使弹出窗口关闭,我也需要它在后台执行。附带说明是,在我为清单文件中的权限添加“警报”之前,我对 Chrome.alarms 未定义,然后它不会阻塞,但我仍然遇到它没有运行后台的问题。

由于上面的文章是在 service worker 的上下文中,我假设您需要将警报侦听器放在 service-worker.Js 文件的顶层。只有这不起作用。我在这里对 Chrome.alarms 未定义(即使授予了“警报”权限):

service-worker.Js

console.log("insIDe service worker")

// getTing Chrome.alarms undefined here
Chrome.alarms.create("alarm",{ periodInminutes: 1 });

将其放入安装事件侦听器也无济于事:

self.addEventListener('install',event => {
    console.log("Installing service worker")
    // still getTing Chrome.alarms undefined here
    Chrome.alarms.create("alarm",{ periodInminutes: 1 });
    Chrome.alarms.onAlarm.addListener((alarm) => {
        if (alarm.name === "alarm") {
            let milliseconds = new Date().getTime();
            console.log(milliseconds)
            Chrome.action.settitle({
                title: "Hello "+ milliseconds
            });
        }
    });
});

出于绝望,我还在清单中添加了“背景”权限,但这也无济于事。

任何线索如何在清单 v3 的后台定期运行某些东西?似乎警报 API 应该是你如何做的,但它显然无法从服务工作者那里访问?

解决方法

迁移指南非常令人困惑,因为它是由网络开发人员编写的。它没有说的是,使用扩展的 service worker 与 ManifestV2 事件页面的 99% 相同,减去 DOM 相关的 API,在 worker 中不可用。因此,您需要进行的更改与切换到 event pages in ManifestV2 基本相同。

由于上面的文章是在 service worker 的上下文中

这与您在 manifest.json 的 BACkground 部分声明的后台服务工作线程脚本相同。

警报侦听器应在脚本的顶层注册。

除了创建警报之外,您还需要添加一个侦听器,该侦听器将在后台脚本中的 alarm event fires 时调用。 “顶级”旨在简化真正的“事件侦听器应该在每次唤醒时执行后台脚本时在事件循环的第一个任务中注册”。所以你可以把它放在任何你想要的地方,例如在其他函数中,甚至在同一个第一个任务中解决的 Promise 中。有关详细信息,请参阅 JavaScript event loop。

浏览器会记住警报,因此如果您需要定期警报,则应在安装扩展程序时仅创建一次。当前,您每次 service Worker 醒来时都会重新创建警报,从而重置其计时。还好你指定了一个 id 参数,否则每次都会添加一个新的警报。

在此处获取未定义的 chrome.alarms

要使用大部分 chrome API,您需要将其名称添加到 manifest.json 中的 permissions。请注意,编辑清单或后台脚本后,您需要在 chrome://extensions 页面中单击扩展程序卡片上的重新加载按钮。

  • @H_416_2@manifest.json:

    "manifest_version": 3,"BACkground": { "service_worker": "bg.js" },"permissions": [ "alarms" ],
  • bg.js:

    chrome.alarms.onAlarm.addListener(a => {
      console.log('Alarm! Alarm!',a);
    });
    
    chrome.runtime.onInstalled.addListener(() => {
      chrome.alarms.get('alarm',a => {
        if (!a) {
          chrome.alarms.create('alarm',{periodInminutes: 1});
        }
      });
    });
    

self.addEventListener('install', 不是必需的,因为在安装扩展时扩展的 service worker 是在内部注册的。 MV3 不需要任何 service Worker 生命周期事件,大多数/全部甚至都不起作用。

大佬总结

以上是大佬教程为你收集整理的您如何使用 manifest v3全部内容,希望文章能够帮你解决您如何使用 manifest v3所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。