le chrome.l'extension.getBackgroundPage (), fonction exemple
Je suis en train de travailler sur une petite extension Chrome qui doit s'exécuter en arrière-plan. Cependant, je comprends que ce n'est pas possible quand je suis en utilisant une fenêtre popup. Après un peu de lecture, il semble que la meilleure option est de créer popup.js
afin d'exécuter le background.js
, à l'aide de chrome.extension.getBackgroundPage()
fonction.
Quelqu'un peut-il svp me montrer un exemple de comment c'est fait?
voici le manifeste:
"browser_action": {
"permissions": ["background"],
"default_popup": "popup.html"},
"options_page": "options.html",
"background": {
"scripts": ["background.js"],
"persistent" : true
}
J'ai inclus les popup.js référence dans popup.html
:
<script src="popup.js"></script>
Et créé une variable dans popup.js
var bkg = chrome.runtime.getBackgroundPage();
alors maintenant, j'ai besoin d'un moyen pour activer le background.js
Ai-je besoin pour exécuter la fonction correspondante à l'intérieur de background.js
de popup.js
,
ou donner une commande générale pour la background.js
courir?
"persistent": false
dans votre manifest.json
. Sinon, voir la réponse de @PawelmhmOriginalL'auteur Nim | 2014-01-15
Vous devez vous connecter pour publier un commentaire.
Oui, vous devez appeler la fonction d'arrière-plan dans votre popup. Voici un exemple simple qui montre comment cela fonctionne.
background.js
popup.js
Lorsque vous inspectez votre popup.js vous verrez "bonjour de l'arrière-plan!" dans votre console. GetBackgroundPage() retourne simplement la fenêtre de l'objet de votre page d'arrière-plan, comme vous le savez probablement toutes les variables sont attachés à cet objet window donc, dans cette façon, vous obtenez l'accès à la fonction définie dans le contexte des scripts.
Il y a un exemple de code la démonstration de cette dans google chrome, documentation voir Inactif Exemple Simple et de regarder le fichier history.js
Il est diffecult pour quelqu'un de deviner ce que vous pourriez avoir un problème avec votre code, si ils ne le voient pas.
OriginalL'auteur Pawel Miech
Le fond de page est chargée, alors vous extension est chargée dans le navigateur Chrome.
Considérer le popup page juste comme un fait normal de la page web: ici, vous devez utiliser le chrome.runtime de faire des demandes à l'arrière-plan de la page.
Habituellement, je le fais à l'aide d'un implicite (temporelle) ou explicite (permanente) du canal. Avec temporelles du canal:
popup.js
background.js
Avec canal permanent:
popup.js
background.js
UPD. Bien que cette manière de contenu-fond de la communication est pleinement fonctionnelle, l'actuel spécifications des conseils à l'aide de
chrome.runtime.getBackgroundPage()
pour appeler une fonction dans le contexte du script est la demande ne devrait pas être asynchrone (donc, moins de codage est nécessaire de faciliter la lecture du code). Voir le manuel et les autres réponses à ce post pour clarifier cette question.chrome.runtime.getBackgroundPage()
est le moyen préféré, ne doivent pas être utilisés uniquement avec l'événement-pages. Il fonctionne aussi bien avec la persistance d'un fond de pages, de sorte qu'il peut toujours être utilisé, quel que soit le type de fond de page.chrome.extension.getBackgroundPage()
, de l'autre, la main ne peut pas être utilisé sur l'événement pages. (Je ne dis pas que vous vouliez dire, sinon, il suffit de mettre un peu plus l'accent sur elle.)Merci pour éclaircir cette question. J'ai modifié ma réponse, de sorte qu'il ne contient pas les déclarations trompeuses plus.
L'avantage de
chrome.extension.getBackgroundPage()
surchrome.runtime.getBackgroundPage
est que le premier est synchrone. Le codage en mode synchrone voie d'abord conduit à la plus claire à comprendre le code. Toutefois, le code synchrone ne peut généralement pas être fait asynchrone à nouveau sans efforts, donc si vous êtes l'élaboration d'une nouvelle extension, utilisezchrome.runtime.getBackgroundPage(callback)
.Votre réponse montre
chrome.runtime.connect
, mais pas dechrome.runtime.onConnect
événement. Donc, le message sera perdu.Par "avantage" entendez-vous "désavantage" ? 😀 (À tout le moins devraient être la "différence" (omi), bien que je crois fermement que le fait d'être asynchrone est un avantage.)
OriginalL'auteur lexasss