📜  chrome 扩展后台脚本 oninstall 未触发 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:29:58.881000             🧑  作者: Mango

Chrome扩展后台脚本oninstall未触发

问题描述

最近开发chrome扩展时发现,在manifest.json文件中指定的background后台脚本,并没有在扩展安装时触发oninstall事件。即,在扩展安装完成后,后台脚本中的chrome.runtime.onInstalled.addListener监听事件并未被触发,导致后续逻辑无法执行。

问题分析

经过排查发现,此问题通常出现在两种情况下:

  1. 在扩展安装完成后,直接刷新或者打开新的tab页,会导致后台脚本的oninstall事件未正常触发。

  2. 如果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文件是否正确配置,并确认相关文件是否存在等问题。