You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chrome Extension MV3:非应用商店私有扩展的更新方法咨询

MV3私有Chrome扩展自动更新的现代化实现方案

由于Chrome MV3对权限和扩展机制做了严格限制,旧版的update_url本地服务器更新方式已不再适用,以下是基于Node.js后端+扩展Service Worker的自定义更新方案:

一、Node.js后端实现(版本接口+CRX托管)

搭建一个简单的HTTP服务,提供版本查询接口和CRX文件下载服务:

const express = require('express');
const fs = require('fs');
const path = require('path');
const app = express();
const PORT = 3000;

// 返回最新版本信息
app.get('/ext/update-info', (req, res) => {
  res.json({
    latestVersion: '1.0.1',
    crxDownloadUrl: 'http://your-server-ip:3000/ext/your-private-ext.crx'
  });
});

// 托管CRX文件,设置正确的MIME类型
app.get('/ext/your-private-ext.crx', (req, res) => {
  const crxPath = path.join(__dirname, 'your-private-ext.crx');
  res.setHeader('Content-Type', 'application/x-chrome-extension');
  res.sendFile(crxPath);
});

app.listen(PORT, () => {
  console.log(`Update service running on http://localhost:${PORT}`);
});

二、MV3扩展端实现(版本检测+更新提示)

通过Service Worker定时检查版本,对比后触发更新提示:

1. 配置manifest.json

添加必要权限和后台脚本:

{
  "manifest_version": 3,
  "name": "私有扩展名称",
  "version": "1.0.0",
  "background": {
    "service_worker": "background.js"
  },
  "permissions": ["alarms", "notifications", "storage"],
  "host_permissions": ["http://your-server-ip:3000/*"],
  // 若涉及RTDB的CSP问题,在此添加对应域名
  "content_security_policy": {
    "extension_pages": "script-src 'self'; object-src 'none'; connect-src https://your-rtdb-domain.com/"
  }
}

2. 编写background.js

实现定时检查和更新逻辑:

// 初始化定时任务(每天检查一次)
chrome.runtime.onInstalled.addListener(() => {
  chrome.alarms.create('versionCheck', { periodInMinutes: 1440 });
});

// 响应定时任务
chrome.alarms.onAlarm.addListener(alarm => {
  if (alarm.name === 'versionCheck') checkUpdate();
});

async function checkUpdate() {
  try {
    const localVersion = chrome.runtime.getManifest().version;
    const res = await fetch('http://your-server-ip:3000/ext/update-info');
    const { latestVersion, crxDownloadUrl } = await res.json();

    // 版本对比(支持多级版本号)
    if (isNewVersion(latestVersion, localVersion)) {
      showUpdateNotification(latestVersion, crxDownloadUrl);
    }
  } catch (err) {
    console.error('版本检查失败:', err);
  }
}

// 版本号对比工具函数
function isNewVersion(newV, oldV) {
  const newParts = newV.split('.').map(Number);
  const oldParts = oldV.split('.').map(Number);
  
  for (let i = 0; i < Math.max(newParts.length, oldParts.length); i++) {
    const newNum = newParts[i] || 0;
    const oldNum = oldParts[i] || 0;
    if (newNum > oldNum) return true;
    if (newNum < oldNum) return false;
  }
  return false;
}

// 弹出更新通知
function showUpdateNotification(version, url) {
  chrome.notifications.create({
    type: 'basic',
    iconUrl: '/icons/icon-48.png',
    title: '扩展可用更新',
    message: `新版本 ${version} 已发布,点击下载安装`,
    buttons: [{ title: '立即下载' }]
  });

  // 监听通知点击
  chrome.notifications.onButtonClicked.addListener((id) => {
    chrome.tabs.create({ url });
    chrome.notifications.clear(id);
  });
}

三、关键注意事项

  • MV3禁止扩展自动安装CRX,必须由用户手动将下载的CRX拖入Chrome扩展管理页面(需开启开发者模式)
  • 确保后端返回的CRX文件MIME类型为application/x-chrome-extension,否则Chrome无法识别
  • 版本对比若需更严谨的语义化版本判断,可在Service Worker中引入semver库(需通过webpack等工具打包)

内容的提问来源于stack exchange,提问作者newbiedev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 09:45:30