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.


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

  }
})

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.


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!')

Ist es möglich, Regexp im Feld "Übereinstimmungen" zu verwenden?
Bootuz

Ja, siehehttps://developer.chrome.com/extensions/content_scripts#matchAndGlob
Dean Meehan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.