Google chrome extension 为什么Chrome扩展是';是否将工具栏图标重置为默认图标?

Google chrome extension 为什么Chrome扩展是';是否将工具栏图标重置为默认图标?,google-chrome-extension,Google Chrome Extension,在这个最小的示例中,我有以下manifest.json: 在每次导航中,我都想将工具栏中的图标更改为绿色png。它可以工作,但是有一个问题: 我在任何页面上,图标都是绿色的 我点击一个链接,它会触发导航 图标重置回红色几毫秒 我的听众被触发,他们将图标设置回绿色 My background.js: 是什么导致了这种行为?有什么方法可以防止图标在导航时复位吗?这就是在Chrome中实现的方法。你可以抱怨。同时,一种解决方法是在manifest.json中默认设置一个中性灰色图标,并在侦听器中更改为

在这个最小的示例中,我有以下manifest.json:

在每次导航中,我都想将工具栏中的图标更改为绿色png。它可以工作,但是有一个问题:

  • 我在任何页面上,图标都是绿色的
  • 我点击一个链接,它会触发导航
  • 图标重置回红色几毫秒
  • 我的听众被触发,他们将图标设置回绿色
  • My background.js:


    是什么导致了这种行为?有什么方法可以防止图标在导航时复位吗?

    这就是在Chrome中实现的方法。你可以抱怨。同时,一种解决方法是在manifest.json中默认设置一个中性灰色图标,并在侦听器中更改为红色或绿色。@wOxxOm感谢您提供的链接。我想知道为什么没有办法让改变永久化。嗯?因为没有人实施它。
    {
      "name": "Getting Started Example",
      "version": "1.0",
      "description": "Build an Extension!",
      "manifest_version": 2,
      "background": {
        "scripts": ["background.js"]
      },
      "permissions": ["webNavigation", "activeTab"],
      "browser_action": {
          "default_icon": {
              "16": "red.png"
          }
      }
    }
    
    const setIcon = (details) => {
        if (details.frameId != 0) {
            return; // only update the icon for main page, not iframe/frame
        }
        chrome.browserAction.setIcon({
            path: { '16' : 'green.png'},
            tabId: details.tabId
        });
    }
    chrome.webNavigation.onHistoryStateUpdated.addListener(setIcon);
    chrome.webNavigation.onBeforeNavigate.addListener(setIcon);
    chrome.webNavigation.onCommitted.addListener(setIcon);