web-dev-qa-db-fra.com

Chrome extension Script de contenu non chargé jusqu'à ce que la page soit actualisée

J'ai un Chrome que je veux exécuter sur les tableaux Trello. Pour l'instant, il ne contient que:

console.log("Hello, world!");

Lorsque vous ouvrez la page du forum Trello via un lien interne, comme à partir de la page Mes forums, le script de contenu ne s'exécute pas. Il s'exécute cependant après avoir actualisé la page.

Mon fichier manifeste contient:

{
  "manifest_version": 2,

  "name": "Temp Ext",
  "version": "1.0",

  "content_scripts": [
    {
      "matches": ["*://trello.com/b/*"],
      "js":["contentscript.js"]
    }
  ]
}

Quelqu'un peut-il m'aider à comprendre pourquoi le script ne s'exécute pas au moment où la page est initialement chargée?

EDIT: Question corrigée. Le problème ne s'est produit qu'après avoir suivi les liens internes, pas tous les liens.

26
Natalie Chouinard

Le problème était que Trello utilise le pushState de HTML5 pour les transitions de page, donc le script de contenu n'était pas toujours exécuté après l'ouverture d'un forum.

Solution

Modifications du manifeste:

{
  "manifest_version": 2,

  "name": "Temp Ext",
  "version": "1.1",

  "content_scripts": [{
    "matches": ["*://trello.com/*"],
    "js":["contentscript.js"]
  }],

  "background": {
    "scripts": ["background.js"]
  },

  "permissions": [
    "*://trello.com/*", "tabs", "webNavigation"
  ]
}

Ajouter un script d'arrière-plan:

chrome.webNavigation.onHistoryStateUpdated.addListener(function(details) {
    chrome.tabs.executeScript(null,{file:"contentscript.js"});
});
43
Natalie Chouinard