как сделать кнопки включения / выключения / иконки для расширения chrome?

Я хочу, чтобы пользователь решил, когда они хотят запустить скрипт, так что, когда браузер открывается, значок "выкл" отображается, и никакой скрипт не запускается; но когда пользователь нажимает на него, он меняется на значок "ВКЛ" и выполняет userscript, пока пользователь не выключит. У меня есть два значка png, которые 32x32 каждый:on.png и off.png.

два вопроса:

  1. как я могу установить значок по умолчанию для my off.png? Я пробовал это в моем manifest.json но он не установил значок вместо этого показал кусочек головоломки (я предполагаю, что по умолчанию):

    ...
    "browser_action": {
       "default_icon": {
           "32": "off.png"
           },
       "default_title": "icon"
    },
    "icons": {
       "32": "on.png",
       "32": "off.png"
    },
    "background": {
       "scripts": ["background.js"] 
    }, 
    "content_scripts": [{ 
       "js": ["SCRIPT.user.js"]
    ...
    
  2. вот мой background.js, где я временно сделал быструю функцию, чтобы попытаться включить/выключить на основе onClicked

    var status = 0;
    
    function toggle() {
    if (status == 0){
        chrome.browserAction.setIcon({path: "on.png", tabId:tab.id}); // so it's set for the tab user is in
        chrome.tabs.executeScript(tab.id, file:"SCRIPT.user.js"); //execute for this tab
        status++;
    }
    if (status == 1){
        chrome.browserAction.setIcon({path: "off.png", tabId:tab.id});
        chrome.tabs.executeScript(tab.id, code:"alert()"); // execute nothing when off
        status++;
    }
    if (status > 1)
        status = 0; // toggle
    }
    
    chrome.browserAction.onClicked.addListener(function(tab) {
        toggle();
    });
    

(я должен упомянуть, что когда я загружаю папку с моими скриптами, значками и манифестом в "Загрузить распакованное расширение", а затем выберите" проверить представления", чтобы проверить, есть ли что-то сразу неправильно, я вижу Uncaught SyntaxError: Unexpected token : в фон.js, хотя я не знаю, что это значит)... и, похоже, он не показывает мой userscript в папке scripts

Итак, есть идеи, помогите?

1 ответов


хорошо, поэтому позвольте мне внести несколько изменений в ваш манифест и фоновые страницы.

манифест.в JSON

"browser_action": {
  "default_icon": "off.png",
  "default_title": "icon"
},

это сделает значение по умолчанию off.png. Что касается раздела icons, прочитайте docs чтобы увидеть, для чего он используется, но пока просто удалите его полностью. Также удалите то, что у вас есть в разделе contentScripts. Если вы хотите ввести его программно, нет необходимости перечислять его в манифесте.

далее некоторые изменения на фоновой странице, чтобы сделать его немного более чистым:

фон.js

var toggle = false;
chrome.browserAction.onClicked.addListener(function(tab) {
  toggle = !toggle;
  if(toggle){
    chrome.browserAction.setIcon({path: "on.png", tabId:tab.id});
    chrome.tabs.executeScript(tab.id, {file:"SCRIPT.user.js"});
  }
  else{
    chrome.browserAction.setIcon({path: "off.png", tabId:tab.id});
    chrome.tabs.executeScript(tab.id, {code:"alert()"});
  }
});