📅  最后修改于: 2023-12-03 15:29:58.881000             🧑  作者: Mango
最近开发chrome扩展时发现,在manifest.json
文件中指定的background
后台脚本,并没有在扩展安装时触发oninstall
事件。即,在扩展安装完成后,后台脚本中的chrome.runtime.onInstalled.addListener
监听事件并未被触发,导致后续逻辑无法执行。
经过排查发现,此问题通常出现在两种情况下:
在扩展安装完成后,直接刷新或者打开新的tab页,会导致后台脚本的oninstall
事件未正常触发。
如果manifest.json
中没有正确配置后台脚本或者没有正确引用相关文件,也会导致后台脚本的事件未被触发。
针对第一种情况,可以采取如下解决方案:
chrome.runtime.onInstalled.addListener(() => {
if (chrome.runtime.onInstalledReason === 'install') {
// TODO: 需要执行的逻辑
}
});
通过判断chrome.runtime.onInstalledReason
属性,可以避免用户在安装完成后直接刷新导致的问题。该属性值为install
时,表示是扩展首次安装成功后触发的事件。此时可以在后台脚本中执行需要执行的逻辑。
针对第二种情况,可以仔细检查manifest.json
文件是否正确配置,示例如下:
{
"manifest_version": 2,
"name": "扩展名称",
"version": "1.0.0",
"description": "扩展描述",
"permissions": ["tabs", "activeTab"],
"background": {
"scripts": ["background.js"]
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["content.js"]
}
],
"browser_action": {
"default_title": "浏览器操作"
},
"icons": {
"16": "icon16.png",
"48": "icon48.png",
"128": "icon128.png"
}
}
其中,background
指定的就是后台脚本文件,scripts
属性指定了background.js
文件的路径。如果这个路径或文件不存在,或者配置出现语法错误等问题,都会导致后台脚本无法正常运行。类似的问题也可能出现在content_scripts
等其他属性中。
针对Chrome扩展后台脚本oninstall
未触发的问题,可以通过判断chrome.runtime.onInstalledReason
属性来规避用户直接刷新或打开tab页的情况。同时,也需要检查manifest.json
文件是否正确配置,并确认相关文件是否存在等问题。