Extension Chrome: créer un nouvel onglet de chrome.onglets.créer) et executeScript dans un nouvel onglet...ne fonctionne pas :(

Je suis actuellement en train de travailler sur un Google Chrome extension qui permettra à un utilisateur de Pinterest facilement épingler plusieurs images à partir d'une page (une fonctionnalité qui n'est pas disponible actuellement). Pour atteindre cet objectif, l'extension a une page d'arrière-plan et les deux scripts de contenu (contentScript1.js et contentScript2.js). Pour les clartés cause, je vais vous expliquer ce que mon extension est censé faire, et ensuite des précisions sur ce problème est découlant. Mon extension (simplifié) afin d'événements qui va comme ceci:

  1. Un utilisateur navigue sur le Web, et décide qu'ils veulent épingler une image à partir de l'onglet en cours, de sorte qu'ils cliquez sur mon extension de navigateur du bouton!
  2. Lorsque le navigateur bouton est cliqué, la background.js fichier déclenche un message d'contentScript1.js pour dire “hey, de saisir tous les balise img sur cette page et de permettre l'utilisateur peut choisir ‘em”
  3. contentScript1.js reçoit le message de background.js, qui appelle une fonction qui extrait toutes les images et ajoute un bouton "soumettre" à la page
  4. L'utilisateur clique sur les images qu'ils veulent, puis clique sur le bouton envoyer
  5. Lorsque le bouton envoyer est cliqué, contentScript1.js déclenche un message d'background.js
  6. Quand background.js reçoit le message de contentScript1.js il redirige l'utilisateur vers pinterest.com afin de permettre l'épinglage. *Remarque: lorsque l'onglet est créé avec une url de pinterest.com, pinterest.com est maintenant l'onglet actif (une extension chrome par défaut de chrome.onglets.créer),
  7. Après background.js crée un nouvel onglet, il exécute contentScript2.js dans l'onglet actuel, qui est maintenant pinterest.com

Ok, tout fonctionne très bien et dandy, sauf contentScript2.js est exécuté dans n'IMPORTE quel ONGLET en cours. Donc, plus précisément, si j'ai ouvert mon navigateur pour l'instant, mon testeur fonction qui est dans contentScript2.js sera exécuté. Cependant, mon pinterest.com l'onglet est créé au moment opportun (quand le bouton "soumettre" est cliqué). De ma compréhension, je ne devrais pas besoin d'utiliser la transmission de messages entre background.js et contentScript2.js parce que les paramètres par défaut de chrome.onglets.créer. Néanmoins, j'ai essayé d'utiliser la transmission de message et il ne fonctionne toujours pas ☹

Voici le code:

manifest.json:

    {
  "manifest_version" : 2,

  "name" : "Pin 'em",
  "description" : "Pin multiple images to different Pinterest boards in just two clicks",
  "version" : "1.1",

  "permissions" : [
     "tabs", 
     "<all_urls>"
  ],

  "browser_action" : {
    "default_icon" : "images/icon.png"
  },

  "background" : {
      "page" : "background.html",
      "persistent" : false
    },

  "content_scripts" : [
  {
    "matches" : ["<all_urls>"],
    "js" : ["lib/jquery.min.js", "src/contentScript1.js", "src/contentScript2.js"],
    "css" : ["stylesheets/style.css"]
    }
  ]
}

et l'arrière-plan de la page:

background.js

//when browser icon is clicked, current tab is selected
//sends message to contentScript1.js 
chrome.browserAction.onClicked.addListener(function() {
  chrome.tabs.getSelected(null, function(tab) {
    chrome.tabs.sendMessage(tab.id, 'displayImages');
  });
}); 

//when message 'redirectImages' is received
//a new tab is created (url = http://pinterest.com)
//extension executes contentScript2.js in pinterest.com
chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
  if (request.action === 'redirectImages') {
    sendResponse({received : 'success'});
    injectScript();  
  }
});

function injectScript() {
  chrome.tabs.create({url : 'http://pinterest.com'}, function(tab) { 
    chrome.tabs.executeScript(tab.id, {file: 'src/contentScript2'});
  });
};

d'abord le contenu du script:

contentScript1.js

function sendMess() {
  chrome.extension.sendMessage({action : 'redirectImages'}, function(response) {
    success = response.received;
    console.log(success);
  });
};


function appendImages() {
  //...does stuff to make a pretty overlay and
  //...grabs img tags, and displays for user to select to select
  //...appends a submit button with class='submit-images' 
};

$(document).on('click', '#submit-images', function(e) {
 //..does magic that you need not worry about (i think?)
 sendMess();
});


chrome.extension.onMessage.addListener(function(request, sender, sendResponse) { 
  if (request === "displayImages") {
    appendImages();
  }
}); 

deuxième contenu du script

contentScript2.js

    function tester() {
  console.log('pinterest script injected');
};

var tester = tester();
Je suppose crome.tabs.executeScript est une faute de frappe?
Dans le manifeste, vous êtes, y compris src/pinterestScript2.js dans votre ensemble de scripts de contenu pour être injecté dans <all_urls>. Est src/pinterestScript2.js différente de contentScript2?
grâce apsillers! J'ai bricolé avec le manifeste.json matchs. Pourriez-vous élaborer sur la façon dont on pourrait inclure deux scripts de contenu avec différents matchs?
aussi, c'était une faute de frappe. vérifier maintenant. Si c'était le problème, je vais faire quelques secoue la tête à moi-même 😉
oh j'ai changé le nom de mon contenu des scripts pour cette question. prétendre que mon manifeste comprend contentScript2.js

OriginalL'auteur user2441282 | 2013-05-31