11
votes

Comment accéder à la page popup page DOM de la page BG dans une extension chromée?

dans Google Chrome's Section du développeur d'extension , dit

Les pages HTML à l'intérieur d'une extension avoir un accès complet aux autres DOMS, et ils peuvent invoquer des fonctions sur l'un l'autre. ... le contenu de la popup sont une page Web définie par un fichier HTML (popup.html). La popup n'a pas besoin à dupliquer le code qui est dans le Page de fond (fond.html) parce que la popup peut invoquer des fonctions Sur la page d'arrière-plan

J'ai chargé et testé jQuery, et peut accéder aux éléments DOM dans l'arrière-plan.html avec jQuery, mais je ne peux pas comprendre comment accéder aux éléments Dom dans popup.html à partir de l'arrière-plan.html.


0 commentaires

3 Réponses :


7
votes

Pouvez-vous discuter pourquoi vous voudriez faire cela? Une page d'arrière-plan est une page qui vit pour toujours pour la durée de vie de votre extension. Alors que la page contextuelle ne vit que lorsque vous cliquez sur la fenêtre contextuelle.

À mon avis, il devrait être refacturé dans l'autre sens, votre pop up doit demander quelque chose de la page d'arrière-plan. Vous venez de le faire dans la popup pour accéder à la page d'arrière-plan: chrome.extension.getBackgroundPage ()

Mais si vous insistez, vous pouvez utiliser une communication simple avec des pages d'extension avec sendrequest () et ONREQUEST . Peut-être pouvez-vous utiliser chrome.extension.geviews


2 commentaires

Hier, alors que je cherchaisais, j'ai réalisé que la popup semble être transitoire; Les scripts sont rechargés chaque fois qu'il est ouvert. J'avais supposé que c'était un objet persistant. Mais maintenant, je vois que tout état contextuel doit être stocké à l'arrière-plan et chargé lorsque la popup est ouverte.


La raison pour laquelle j'ai fini ici est que, dans mon extension chromée, une action est déclenchée à l'aide de l'interface utilisateur popup, mais le travail réel est effectué dans le script d'arrière-plan afin que je souhaitive que l'interface utilisateur change en fonction de la durée de l'opération, comme indiqué. par le script de fond.



4
votes

Je comprends pourquoi vous voulez faire cela comme je me suis rencontré moi-même dans le problème moi-même.

La chose la plus facile à laquelle je pouvais penser était d'utiliser la méthode de la Google d'un rappel - les méthodes SendRequest et onRequest fonctionnent également, mais je trouve Ils doivent être maladroits et moins simples.

popup.js xxx

arrière-plan.html xxx


2 commentaires

Cela ne fonctionnera pas, vous ne pouvez pas accéder à la page d'arrière-plan du script de contenu. Ils vivent dans différents mondes. La seule façon d'accéder à la page d'arrière-plan du script de contenu se fait par la messagerie. Vous pouvez effectuer une recherche rapide sur Stackoverflow pour quelques exemples.


@Mohamed: La question concerne une page contextuelle, pas un script de contenu.



3
votes

Autres réponses mention, vous pouvez appeler fond.js Fonctions de popup.js comme: xxx pré>

mais pour accéder à popup.js ou popup.html de l'arrière-plan.js, vous " est supposé utiliser l'architecture des messages comme: p> xxx pré>

Cependant, il semble que vous puissiez accéder synchroneusement popup.js à partir de l'arrière-plan.js, tout comme vous pouvez accéder synchrone à l'autre. chemin autour. chrome.extension.geviews code> peut vous obtenir la fenêtre contextuelle objet code>, et vous pouvez l'utiliser pour appeler les fonctions, accéder à des variables et accéder au DOM. P>

var _popup = chrome.extension.getViews( { type: 'popup' } )[0];
_popup.popupJsFunction();
_popup.document.getElementById('element');
_popup.document.title = 'poop'


0 commentaires