Extension Chrome: exécutez-le à chaque chargement de page

91

Je veux créer une extension chrome qui exécute certains scripts après le chargement d'une page, je ne sais pas si je dois implémenter cette logique sur la page d'arrière-plan ou cela peut être n'importe où ailleurs, toute aide ici sera grandement appréciée.

Albertosh
la source
au cas où, il devrait exécuter le script après le chargement d'une page dans le navigateur.
albertosh
@ZloySmiertniy oui, recherchez simplement les scripts de contenu, assurez-vous également que dans l'option run_at vous mettez document_end et aussi dans les matches: vous devez spécifier dans quelle URL vos scripts seront injectés.
albertosh

Réponses:

92

À partir d'un script d'arrière - plan, vous pouvez écouter l' chrome.tabs.onUpdatedévénement et vérifier la propriété changeInfo.statussur le rappel. Il peut être en cours de chargement ou complet . S'il est terminé , effectuez l'action.

Exemple:

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

    // do your things

  }
})

Comme cela se déclenchera probablement à chaque achèvement d'onglet, vous pouvez également vérifier si l'onglet est activesur son attribut homonyme , comme ceci:

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

    // do your things

  }
})
Fiatjaf
la source
8
Uncaught TypeError: Cannot read property 'onUpdated' of undefined
Vert
2
Quelle? Cette réponse date d'il y a 2 ans et demi. Tout a probablement changé maintenant.
fiatjaf
1
Pour faire une page URL spécifique:if (tab.url.startsWith("https://example.com") == false) return;
Nabi KAZ
47

S'il doit s'exécuter sur l' onloadévénement de la page, ce qui signifie que le document et tous ses actifs ont été chargés, cela doit être dans un script de contenu intégré dans chaque page dont vous souhaitez effectuer le suivi onload.

Matchu
la source
14
Il serait préférable de laisser le script de contenu être injecté à "document_end" voir "run_at" dans le manifeste content_script:run_at: "document_end"
Mohamed Mansour
11

Ce code devrait le faire:

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
la source
est-il possible d'utiliser une expression rationnelle dans le champ "matches"?
Bootuz
Oui, voirhttps://developer.chrome.com/extensions/content_scripts#matchAndGlob
Dean Meehan