Chrome-Erweiterung: Lassen Sie es bei jedem Laden der Seite ausführen

89

Ich möchte eine Chrome-Erweiterung erstellen, die einige Skripte ausführt, nachdem eine Seite geladen wurde. Ich bin mir nicht sicher, ob ich diese Logik auf der Hintergrundseite implementieren muss oder woanders, jede Hilfe hier wird sehr geschätzt.

Albertosh
quelle
Nur für den Fall, dass das Skript ausgeführt wird, nachdem eine Seite in den Browser geladen wurde.
Albertosh
@ZloySmiertniy ja, suchen Sie einfach nach Inhaltsskripten und stellen Sie sicher, dass Sie in der Option run_at document_end und auch in Übereinstimmungen eingeben: Sie müssen angeben, in welche URLs Ihre Skripte eingefügt werden.
Albertosh

Antworten:

91

Über ein Hintergrundskript können Sie das chrome.tabs.onUpdatedEreignis abhören und die Eigenschaft changeInfo.statusdes Rückrufs überprüfen . Es kann geladen oder abgeschlossen werden . Wenn es abgeschlossen ist , führen Sie die Aktion aus.

Beispiel:

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

    // do your things

  }
})

Da dies wahrscheinlich bei jedem Tab-Abschluss ausgelöst wird, können Sie auch überprüfen, ob sich der Tab activein seinem gleichnamigen Attribut befindet , wie folgt :

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

    // do your things

  }
})
Fiatjaf
quelle
7
Uncaught TypeError: Cannot read property 'onUpdated' of undefined
Grün
2
Was? Diese Antwort stammt von vor zweieinhalb Jahren. Wahrscheinlich hat sich jetzt alles geändert.
Fiatjaf
1
Für bestimmte URL-Seite:if (tab.url.startsWith("https://example.com") == false) return;
Nabi KAZ
47

Wenn es auf dem onloadEreignis der Seite ausgeführt werden muss, was bedeutet, dass das Dokument und alle seine Assets geladen wurden, muss dies in einem Inhaltsskript enthalten sein, das in jede Seite eingebettet ist, für die Sie nachverfolgen möchten onload.

Matchu
quelle
14
Es wäre besser, das Inhaltsskript bei "document_end" einfügen zu lassen, siehe "run_at" im content_script-Manifest:run_at: "document_end"
Mohamed Mansour
9

Dieser Code sollte es tun:

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
quelle
Ist es möglich, Regexp im Feld "Übereinstimmungen" zu verwenden?
Bootuz
Ja, siehehttps://developer.chrome.com/extensions/content_scripts#matchAndGlob
Dean Meehan