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

相关推荐
夏天想2 分钟前
vue通过iframe引入一个外链地址,怎么保证每次切换回这个已经打开的tab页的时候iframe不会重新加载
前端·javascript·vue.js
GISer_Jing3 分钟前
2026年前端开发目标(From豆包)
前端·学习·aigc
军军君0130 分钟前
Three.js基础功能学习十一:动画与音频
前端·javascript·3d·js·threejs·三维
我即将远走丶或许也能高飞30 分钟前
reduxjs/toolkit 的学习使用
前端·javascript·学习·reactjs
Coder_Boy_31 分钟前
基于SpringAI的在线考试系统-知识点管理模块完整优化方案
java·前端·人工智能·spring boot
Dontla1 小时前
打开网站时弹出Accept Cookies(接受Cookie)提示是什么意思?(数据保护法规,欧盟GDPR)
前端·数据库
weixin_489690021 小时前
MicroSIP自定义web拨打协议
服务器·前端·windows
幻云20102 小时前
Python机器学习:筑基与实践
前端·人工智能·python
web小白成长日记2 小时前
Vue3中如何优雅实现支持多绑定变量和修饰符的双向绑定组件?姜姜好
前端·javascript·vue.js
晴天飛 雪2 小时前
Spring Boot 接口耗时统计
前端·windows·spring boot