【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/

相关推荐
通义灵码15 分钟前
用 Qoder 加速前端巨石应用的架构演进
前端·人工智能·架构·qoder
一水鉴天19 分钟前
整体设计 定稿 之21 拼语言表述体系之3 dashboard.html V5(codebuddy)
前端·人工智能·架构
前端fighter25 分钟前
全栈项目:宠物用品购物系统及后台管理
前端·vue.js·后端
吃炒鸡蛋39 分钟前
反射更新字段
java·服务器·前端
子洋44 分钟前
LLM 原理 - 输入预处理
前端·人工智能·后端
女生寝室0381 小时前
DiskSGenius Pro [6.0.1.1645][单文件汉化版] 下载
前端
前端老宋Running1 小时前
别让你那 5MB 的 JS 文件把用户吓跑:React 代码分割(Code Splitting)实战指南
前端·javascript·react.js
小飞侠在吗1 小时前
vue ref
前端·javascript·vue.js
悟能不能悟1 小时前
在 Vue Router 4 中,如何设置base参数
前端·javascript·vue.js
Lovely_Ruby2 小时前
前端er Go-Frame 的学习笔记:实现 to-do 功能(三),用 docker 封装成镜像,并且同时启动前后端数据库服务
前端·后端