Dans une extension Chrome, un script peut être inclus en tant que script de contenu ou script d'arrière-plan. La plupart des choses qu'il fait est la même chose, mais il y en a qui varient selon le contexte. La question est: comment un script peut-il dire dans quel contexte il est exécuté? Merci.Comment savoir si un script est exécuté en tant que script de contenu ou script d'arrière-plan?
Répondre
Eh bien, je réussi à travailler ce.
var scriptContext = function() {
try {
if (chrome.bookmarks) {
return "background";
}
else {
return "content";
}
}
catch (e) {
return "content";
}
}
C'est parce qu'une exception serait levée si le script de contenu tente d'accéder au chrome * sauf pièces chrome.extension.
Référence: http://code.google.com/chrome/extensions/content_scripts.html
cette approche a deux problèmes, l'un, il repose sur try catch qui est vraiment lent. deux, il existe trois contextes dans une extension de chrome; des pages d'extension, des scripts d'arrière-plan et des scripts de contenu. cela ne détecte que les états plutôt que les trois. –
Je pense que c'est une version assez robuste qui a travaillé dans mes tests initiaux et ne nécessite pas une prise d'essai plus lent, et il identifie au moins les trois contextes principaux d'une extension de chrome et devrait faites-vous savoir si vous êtes sur la page de base aussi bien.
av = {};
av.Env = {
isChromeExt: function(){
return !!(window['chrome'] && window['chrome']['extension'])
},
getContext: function(){
var loc = window.location.href;
if(!!(window['chrome'] && window['chrome']['extension'])){
if(/^chrome/.test(loc)){
if(window == chrome.extension.getBackgroundPage()){
return 'background';
}else{
return 'extension';
}
}else if(/^https?/.test(loc)){
return 'content';
}
}else{
return window.location.protocol.replace(':','');
}
}
};
Si vous développez l'extension, vous pouvez sûrement charger le script dans le contexte préféré? –
@Anon. Oui, je peux, mais comme je l'ai dit dans le sujet, j'ai besoin d'une implémentation différente selon la plate-forme et je ne veux pas casser mon code à cause de ces restrictions. –
Je suis d'accord avec Anon. C'est quelque chose qui devrait être manipulé au moment du build/deploy, pour ainsi dire. Vous pouvez écrire un script de build pour déployer deux versions différentes selon les besoins. Vérification à l'exécution à chaque fois est très inefficace. –