由于安全限制,本文采取间接的方式实现
1、项目部分
比如通过cookie、localStorage等进行状态存储
1.1、初始化判断
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、卸载状态变更
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、安装事件监听
/*** 首次安装扩展程序、扩展程序更新到新版本以及 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、卸载事件监听
/*** 转跳至目标项目地址进行状态变更、统计等事务处理* @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/