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.
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 /
Que Diriez-vous d'ajouter ceci à votre fichier de manifeste
"content_scripts": [
{
"js": [
"jquery.js",
"contentscript.js"
]
}
],
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 .
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);} );
}
})();
}
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