I have a firefox extension that can change the extension icon in the html options menu when you click on the icon image.
options.html
<body>
<section class="browser-icons">
<img id="black-trash" img src="../icons/black_trash.png" title="Black trash"/>
<img id="red-trash" img src="../icons/red_trash.png" title="Red trash"/>
</section>
options.js
const blackTrash = document.getElementById("black-trash");
const redTrash = document.getElementById("red-trash");
function setBlack() {
browser.browserAction.setIcon({path:"../icons/black_trash.png"});
}
function setRed() {
browser.browserAction.setIcon({path: "../icons/red_trash.png"});
}
blackTrash.addEventListener("click", setBlack);
redTrash.addEventListener("click", setRed);
However, if you change the icon to red, it resets to black (default) whenever you restart your browser.
How do I save the icon state locally?
Take a look: https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Client-side_web_APIs/Client-side_storage
I don't know exacly but try the localStorage to this -
function setBlack() {
browser.browserAction.setIcon({path:"../icons/black_trash.png"});
localStorage.setItem('icon', '../icons/black_trash.png');
}
To call this you will need only localStorage.getItem('icon');
I don't know if this solve your problem but we are here to learn too ;)