Rozszerzenie Chrome: uruchom przy każdym wczytaniu strony

91

Chcę stworzyć rozszerzenie chrome, które wykonuje niektóre skrypty po załadowaniu jednej strony, nie jestem pewien, czy muszę zaimplementować tę logikę na stronie w tle, czy może to być gdziekolwiek indziej, każda pomoc będzie bardzo mile widziana.

albertosh
źródło
na wszelki wypadek powinien uruchomić skrypt po załadowaniu dowolnej strony w przeglądarce.
albertosh
@ZloySmiertniy tak, po prostu poszukaj skryptów zawartości, upewnij się również, że w opcji run_at umieścisz document_end, a także w dopasowaniach: musisz określić, do którego adresu URL zostaną wstrzyknięte twoje skrypty.
albertosh

Odpowiedzi:

92

Ze skryptu działającego w tle możesz odsłuchać chrome.tabs.onUpdatedzdarzenie i sprawdzić właściwość changeInfo.statuswywołania zwrotnego. Może być ładowany lub kompletny . Jeśli jest zakończona , wykonaj czynność.

Przykład:

chrome.tabs.onUpdated.addListener( function (tabId, changeInfo, tab) {
  if (changeInfo.status == 'complete') {

    // do your things

  }
})

Ponieważ będzie to prawdopodobnie wywołać na każdym zakończeniu karcie można również sprawdzić, czy karta jest activena swoim jednobrzmiące atrybutu , podobnie jak to:

chrome.tabs.onUpdated.addListener( function (tabId, changeInfo, tab) {
  if (changeInfo.status == 'complete' && tab.active) {

    // do your things

  }
})
fiatjaf
źródło
8
Uncaught TypeError: Cannot read property 'onUpdated' of undefined
Green
2
Co? Ta odpowiedź pochodzi sprzed 2 i pół roku. Prawdopodobnie wszystko się teraz zmieniło.
fiatjaf
1
Do wykonania określonej strony z adresem URL:if (tab.url.startsWith("https://example.com") == false) return;
Nabi KAZ
47

Jeśli musi być uruchamiany na onloadzdarzeniu strony, co oznacza, że ​​dokument i wszystkie jego zasoby zostały załadowane, musi to znajdować się w skrypcie zawartości osadzonym na każdej stronie, którą chcesz śledzić onload.

Matchu
źródło
14
Byłoby lepiej, gdyby skrypt zawartości był wstrzykiwany w „document_end”, patrz „run_at” w manifeście content_script:run_at: "document_end"
Mohamed Mansour,
10

Ten kod powinien to zrobić:

manifest.json

   {
      "name": "Alert 'hello world!' on page opening",
      "version": "1.0",
      "manifest_version": 2,
      "content_scripts": [
        {
          "matches": [
            "<all_urls>"
          ],
          "js": ["content.js"]
        }
      ]
    }

content.js

alert('Hello world!')
Evan Ross
źródło
czy można użyć wyrażenia regularnego w polu „dopasowania”?
Bootuz
Tak, patrzhttps://developer.chrome.com/extensions/content_scripts#matchAndGlob
Dean Meehan