【chrome扩展开发】如何在项目中判断插件是否已安装

由于安全限制,本文采取间接的方式实现

1、项目部分

比如通过cookie、localStorage等进行状态存储

1.1、初始化判断

javascript 复制代码
function getCookie(name){
	let arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"))
    if(arr != null){
      return unescape(arr[2])
    }else{
      return null
    }
}

let _isChromePluginInstall = getCookie('chrome-plugin');
if(_isChromePluginInstall && _isChromePluginInstall==='Y'){
	// 已安装插件
}else{
	// 未安装插件
}

1.2、卸载状态变更

javascript 复制代码
function getQueryString(name) {
	var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
	var r = window.location.search.substr(1).match(reg);
	if (r != null) {
		return unescape(r[2]);
	}
	return null;
}

let _on = getQueryString('on')
if(_on && _on === 'uninstalled'){
	// 修改插件安装状态
	// 其他业务处理
}

2、Chrome Extensions部分

在background.js中进行安装、卸载事件监听

2.1、安装事件监听

javascript 复制代码
/**
 * 首次安装扩展程序、扩展程序更新到新版本以及 Chrome 更新到新版本时触发
 * @link https://developer.chrome.com/docs/extensions/reference/runtime/#event-onInstalled
 */
chrome.runtime.onInstalled.addListener(function () {
    setTimeout(function () {
    	// 对目标项目进行cookie写入
		const _cf = {
			name: 'chrome-plugin',
			value: 'Y',
			url: 'http://xxxx.xxx',
			domain: 'xxxx.xxx'
		}
		chrome.cookies.set(_cf, function (res) {
		  // ...
		});
    }, 1000)
  })

2.2、卸载事件监听

javascript 复制代码
/**
 * 转跳至目标项目地址进行状态变更、统计等事务处理
 * @link https://developer.chrome.com/docs/extensions/reference/runtime/#method-setUninstallURL
 */
chrome.runtime.setUninstallURL(`${SysConfig.APP_URL}/#?on=uninstalled`, ()=>{})

Ps:
management权限的监听事件,似乎无法对安装、卸载起到作用,具体原因不清楚,还有待研究。

有兴趣的小伙伴也可以研究研究,官方文档地址:https://developer.chrome.com/docs/extensions/reference/management/

相关推荐
可乐鸡翅yeah_20 分钟前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
IT_陈寒32 分钟前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端
广州华水科技41 分钟前
大坝安全监测解决方案:单北斗GNSS形变监测系统应用与维护
前端
yivifu1 小时前
中文古籍电子书注释集成
前端·javascript·python·beautifulsoup·epub
默_笙2 小时前
🛴 从散件到整机:DeepAgents 与 Agent 身上预留的那些"插槽"(前置介绍)
前端·javascript
zhangzeyuaaa2 小时前
深入理解 Ruby 运算符:本质、分类、坑点与重载实战
开发语言·前端·ruby
一木 之林3 小时前
DeepSeek Agent 开发(一)
开发语言·前端·javascript
树下水月4 小时前
Typora破解
linux·服务器·前端
用户5508492902564 小时前
CSS布局实战:从Flex到Grid的完整避坑指南
前端
用户5508492902564 小时前
前端接口请求层怎么封装?一个可落地的请求方案
前端