Extensions GoogleChrome: comment inclure jQuery dans un script de contenu à injection programmatique?

j'injecte mon "script de contenu 151940920 " à partir du background page lorsque l'utilisateur clique sur le bouton browser action , comme ceci:

chrome.browserAction.onClicked.addListener(function (tab) {
    chrome.tabs.executeScript(null, { file: "content.js" });
});

alors comment puis-je accéder à jQuery depuis mon content.js ? Je ne vois pas comment l'injecter en même temps.

36
demandé sur Cœur 2011-01-15 08:06:26

5 réponses

Ce sujet:

chrome.tabs.executeScript(null, { file: "jquery.js" }, function() {
    chrome.tabs.executeScript(null, { file: "content.js" });
});

vous pouvez télécharger " jquery.js "d'ici: http://jquery.com/download /

73
répondu serg 2015-06-25 02:54:19

Que Diriez-vous d'ajouter ceci à votre fichier de manifeste

"content_scripts": [
    {
        "js": [
                "jquery.js", 
                "contentscript.js"
            ]
    }
],
13
répondu Apoorv Saini 2013-05-26 12:30:04

mise à jour:

Exécuter second script après la première serait plus précis en termes de script de commande, result est un tableau de résultats de l'exécution du script dans la liste des onglets.

chrome.tabs.executeScript(null, {file:'js/jquery-2.1.1.min.js'}, function(result){
    chrome.tabs.executeScript(null, {file:'js/myscript.js'});
});

OLD:

injecter Jquery suivi de votre script vous donnera la possibilité d'accéder à Jquery dans votre script.

chrome.tabs.executeScript(null, {file:'js/jquery-2.1.1.min.js'});
chrome.tabs.executeScript(null, {file:'js/myscript.js'});

vous avez plus de contrôle sur la façon dont le script doit être injecté décrit dans ici . Spécialement la propriété allFrames est importante si vous souhaitez injecter script dans tous les cadres du document. L'ignorer ne fera qu'injecter dans le cadre supérieur. Car il n'est pas mentionné dans d'autres réponses suppose que cela vous aide. Les Scripts peuvent toujours être injectés en l'ajoutant pour manifester comme décrit ici .

3
répondu Ruwanka Madhushan 2017-02-22 05:56:45

comme j'ai beaucoup de scripts avec beaucoup de dépendances, j'utilise une fonction concatenateInjection qui prend trois paramètres:

//id: the tab id to pass to executeScript
//ar: an array containing scripts to load ( index order corresponds to execution order)
//scrpt (opzional): the last script to execute (if not provided, than the last script is the last insert in previous array)

function concatenateInjections(id, ar, scrpt){
  var i = ar.length;
  var idx = 0;

  function inject(idx){
    idx++;
    if(idx <= i){
      var f = ar[idx-1];
      chrome.tabs.executeScript(id, { file: f }, function() {
          inject(idx);
      });
    }else{
      if(typeof scrpt === 'undefined') return;
      chrome.tabs.executeScript(id, { file: scrpt });
    }
  }
  inject(idx);
}

et exemple d'utilisation:

// id is tab id

// sources: first execute jquery, than default.js and anime.js in the end
var def = [
  "lib/jquery-1.11.3.min.js", 
  "lib/default.js", 
  "injection/anime.js"
];

// run concatenate injections
concatenateInjections(id, def);

Pense que cela pourrait être utile.

UPDATE

Version avec concat et fermeture (plus esthétique):

function concatenateInjections(id, ar, scrpt){

  if( typeof scrpt !== 'undefined' ) ar = ar.concat([scrpt]);

  var i = ar.length;
  var idx = 0 ;

  (function (){
    var that = arguments.callee;
    idx++;
    if(idx <= i){
      var f = ar[idx-1];
      chrome.tabs.executeScript(id, { file: f }, function(){ that(idx);} );
    }
  })();

}
2
répondu Sim Sca 2015-09-19 10:11:32

chaque fois que vous souhaitez insérer dynamiquement jQuery, je recommande ce script

j'ai personnellement une recherche personnalisée Chrome " $ "qui remplace $ par

javascript:
var jq = document.createElement('script');
jq.onload = function(){};
jq.src = "https://code.jquery.com/jquery-2.1.1.min.js";
document.querySelector('head').appendChild(jq);

javascript: est juste la façon d'exécuter javascript à partir de la barre d'url

j'utilise ceci sur ma page about:blank quand j'essaie de simuler une situation css rapidement

0
répondu neaumusic 2015-06-25 03:07:20