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

相关推荐
LuciferHuang6 小时前
震惊!三万star开源项目竟有致命Bug?
前端·javascript·debug
GISer_Jing6 小时前
前端实习总结——案例与大纲
前端·javascript
天天进步20156 小时前
前端工程化:Webpack从入门到精通
前端·webpack·node.js
姑苏洛言7 小时前
编写产品需求文档:黄历日历小程序
前端·javascript·后端
知识分享小能手7 小时前
Vue3 学习教程,从入门到精通,使用 VSCode 开发 Vue3 的详细指南(3)
前端·javascript·vue.js·学习·前端框架·vue·vue3
姑苏洛言8 小时前
搭建一款结合传统黄历功能的日历小程序
前端·javascript·后端
redreamSo8 小时前
AI 绘图效率神器:Mermaid Previewer Sidebar Chrome 插件
chrome·langchain·aigc
你的人类朋友9 小时前
🤔什么时候用BFF架构?
前端·javascript·后端
知识分享小能手9 小时前
Bootstrap 5学习教程,从入门到精通,Bootstrap 5 表单验证语法知识点及案例代码(34)
前端·javascript·学习·typescript·bootstrap·html·css3