Muszę zapisać stan rozszerzenia. Jeśli jest włączona, kod będzie działać na określonej stronie internetowej, a jeśli nie, to nie będzie.

Nie rozumiem jeszcze, jak to zrobić, ponieważ nie rozumiem tego w pełni.

To jest kod HTML pola wyboru (popup.html):

<div class="onOff">
      <label class="switch">
        <input id="checkbox" type="checkbox" value="saveValue" />
        <span class="slider round" id="theSwitch"></span>
      </label>

      <span id="onOroff">OFF</span>
</div>

To jest kod jQuery, który zmienia kolor i tekst po kliknięciu przycisku (kolor bg, tekst włączania / wyłączania). Ten kod znajduje się w popup.js :

    if ($("#checkbox").is(":checked")) {
      $("#onOroff").text("OFF");
      $(".slider").css({ "background-color": "#C75052" });
    } else {
      $("#onOroff").text("ON");
      $(".slider").css({ "background-color": "#50c878" });
    }
  });

Tutaj możesz zobaczyć rozszerzenie:

https://imgur.com/a/Ip63ExB

Kod, który usuwa reklamy, znajduje się w contentEditor.js.

Kiedy klikniesz rozszerzenie i otworzysz je, Chrome widzi to jako kolejną otwieraną stronę, więc kiedy włączam rozszerzenie (klikam Wyłącz) i zamykam okno rozszerzenia, otwieram je ponownie, nie zapisuje tego stanu .

Myślę, że muszę zapisać check / unchecked w zmiennej, przekazać to do chrome.Storage i mieć chrome.storage zapisać ostatnią wersję przycisku.

2
CODER11713 20 listopad 2019, 18:43
Rozszerzenia składają się z różnych kontekstów/komponentów, dlatego ważne jest, aby zrozumieć, gdzie dokładnie działa ten kod. Dodaj manifest.json i opisz, które pliki zawierają opublikowany kod. Jeśli chodzi o korzystanie z chrome.storage, łatwo jest znaleźć istniejące przykłady przy użyciu witryny takiej jak google.com, oto losowy przykład: link.
 – 
wOxxOm
20 listopad 2019, 18:49
Jquery znajduje się w popup.js, a kod HTML nazywa się popup.html. Nie mam nic w skrypcie Background, a kod, który edytuje zawartość strony, znajduje się w contentEditor. Mam trudności z analizowaniem tego, co muszę zrobić. Czy piszę chrome.storage.set w popup.js? Jeśli tak, w jaki sposób odczyta go skrypt działający w tle? Mają inny zakres.
 – 
CODER11713
20 listopad 2019, 18:52

2 odpowiedzi

Musisz zadeklarować uprawnienia do przechowywania w manifeście

  {
    "name": "My extension",
    ...
    "permissions": [
      "storage"
    ],
    ...
  }

A następnie użyj go jak

chrome.storage.sync.set({yourValue: true}, function(){});

Ustawić i zdobyć

chrome.storage.sync.get(['yourValue'], function(result){
      // your value is in result.yourValue
});

Drugi parametr (funkcja) to wywołanie zwrotne, którego należy użyć, aby wskazać, co dalej zrobić z tymi danymi.

0
estavillo 20 listopad 2019, 18:53
Mam zadeklarowaną pamięć w uprawnieniach. Problem polega na tym, że mam trzy skrypty: Popup.js, contentEditor.js i background.js. Nie rozumiem, jak faktycznie przechowywać wartość pola wyboru (w którym skrypcie), a następnie jak ją zapisać. Ponieważ wątpię, aby skrypt w tle mógł odczytać css z popup.html.
 – 
CODER11713
20 listopad 2019, 18:59

Po zadeklarowaniu uprawnień w pliku manifest.json

    {
    "name": "My extension",
    ...
    "permissions": [
      "storage"
    ],
    ...
  }

Możesz używać interfejsu API chrome.storage w skryptach zawartości, tła i wyskakujących okienek.

if ($("#checkbox").is(":checked")) {
  $("#onOroff").text("OFF");
  chrome.storage.local.set({button: 'off'}, function() {
      console.log('Button state saved to off');
    });
  $(".slider").css({ "background-color": "#C75052" });
} else {
  $("#onOroff").text("ON");
  chrome.storage.local.set({button: 'on'}, function() {
      console.log('Button state saved to on');
    });
  $(".slider").css({ "background-color": "#50c878" });
}});

Będziesz wtedy mieć dostęp do pobrania wartości z pliku background.js, wysyłając żądanie z chrome.storage.

chrome.storage.local.get(['button'], function(result) {
      console.log('The button's state is currently ' + result.key);
    });
0
jasonandmonte 22 listopad 2019, 03:39