7

Chcę, aby użytkownik zdecydował, kiedy chce uruchomić skrypt, aby po uruchomieniu przeglądarki wyświetlała się ikona "off" i nie uruchamiał się żaden skrypt; ale gdy użytkownik go kliknie, zmieni się w ikonę "on" i wykona polecenie usercript, dopóki użytkownik nie kliknie. Mam dwie ikony png, każda o rozmiarze 32x32: on.png i off.png.jak zrobić/wyłączyć przyciski/ikony dla rozszerzenia chrome?

Moje dwa pytania:

  1. Jak mogę ustawić domyślną ikonę dla mojego off.png? Próbowałem to w moim manifest.json ale nie ustawić ikonę, zamiast pokazał kawałek układanki (przypuszczam domyślne):

    ... 
    "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. Oto mój background.js, gdzie mam chwilowo popełnił funkcję szybkiego spróbować i przełączniki on/off oparty na zasadzie 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(); 
    }); 
    

(należy wspomnieć, że kiedy załadować obudowę folderu Moje skrypty, ikony i manifestuje się w „Wczytaj rozszerzenie”, a następnie wybierz „sprawdzić widoki " do sprawdź, czy coś jest nie tak od razu, widzę Uncaught SyntaxError: Unexpected token : w background.js, ale nie wiem, do czego to się odnosi) i nie wydaje się, aby mój usercript był w folderze skryptów

, wszelkie pomysły, pomoc?

Odpowiedz

8

W porządku, pozwól, że wprowadzę kilka zmian do stron manifestu i tła.

manifest.json

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

To uczyni domyślnego off.png. Jeśli chodzi o sekcję ikon, przeczytaj docs, aby zobaczyć, do czego jest ona używana, ale na razie wystarczy ją całkowicie usunąć. Usuń również to, co masz w sekcji dotyczącej treści. Jeśli chcesz go wprowadzić programowo, nie ma potrzeby wymieniania go w manifeście.

Następny pewne zmiany tła strony, aby go nieco bardziej czysty:

background.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()"}); 
    } 
}); 
+1

@tempcode ja właśnie skopiowany kod wcześniej, ale kiedy patrzę na nią ponownie widzę, że przegapiłeś '{}' otaczające 'code' i' file' części 'executeScript' spróbuj dodać je i sprawdź, czy błąd zniknął. – BeardFist

+0

Ok, że przeszkoda skoczyła, jesteśmy prawie na miejscu. Ta poprawka pozwoliła mi na przełączenie z off na włączone * (podczas mojego pierwszego testu napotkałem '" manifest rozszerzenia musi zażądać pozwolenia na dostęp do tego hosta "' - ponieważ zaproponowałeś usunięcie sekcji 'content-scripts' w' manifeście', gdzie miałem 'matches' i' excludes', dodałem 'permissions', aby naprawić ten błąd) *, ale jest jeszcze jeden drobny problem: raz go włączam" on "nie mogę kliknąć, aby go wyłączyć, po prostu pozostaje" włączony " "dopóki strona nie zostanie załadowana (przynajmniej wiemy, że działa unikalny" tab.id "). Ale na bok, cała reszta wydaje się działać. Dzięki za pomoc do tej pory! – tempcode

+1

@tempcode W porządku, więc wydaje się, że problem polegał na tym, że 'status' to jakieś słowo kluczowe, więc' var status = false' nie przypisywał 'false', ale' 'false'' ponieważ status został już zdefiniowany jako ciąg znaków . Zamiast tego zmień nazwę zmiennej na coś podobnego do 'przełączania'. – BeardFist

Powiązane problemy