Je développe une extension pour le navigateur Google Chrome. Je n'arrivais pas à comprendre comment accéder à l'objet DOM de l'onglet courant à partir de la page "popup.html". des suggestions?Accéder à l'objet DOM de l'onglet en cours à partir de "popup.html"?
Répondre
Par défaut, dans popup.js/popup.html, l'objet "document" se réfère uniquement au document de la fenêtre contextuelle de l'extension. Pour obtenir le DOM pour un onglet spécifique (par exemple l'onglet actuellement actif), vous devez utiliser content scripts communications. Par exemple, nous devons envoyer une demande de la extension à votre script de contenu via popup, donc dans le popup.html vous faites quelque chose comme ceci:
chrome.tabs.getSelected(null, function(tab) {
// Send a request to the content script.
chrome.tabs.sendRequest(tab.id, {action: "getDOM"}, function(response) {
console.log(response.dom);
});
});
maintenant dans le script de contenu, nous avons besoin de listen for those events venant de la extension, donc dans certains fichiers que nous avons appelé dom.js
chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
if (request.action == "getDOM")
sendResponse({dom: "The dom that you want to get"});
else
sendResponse({}); // Send nothing..
});
maintenant, rappelez-vous de configurer votre manifest pour inclure le script de contenu et l'autorisation d'onglet.
Cette réponse semble ne pas fonctionner avec la dernière API. Ceci est un exemple de travail.
popup.js:
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
var tab = tabs[0];
console.log(tab.url, tab.title);
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.sendMessage(tab.id, {greeting: "hello"}, function(msg) {
msg = msg || {};
console.log('onResponse', msg.farewell);
});
});
});
getDescription.js:
window.onload = function() {
chrome.runtime.onMessage.addListener(function(msg, _, sendResponse) {
console.log('onMessage', msg);
if (msg.greeting == "hello") {
sendResponse({farewell: "goodbye"});
} else{
sendResponse({});
}
});
};
parties pertinentes de manifest.json:
{
"permissions": [
"tabs"
],
"content_scripts": [
{
"matches": ["http://*/*", "https://*/*"],
"js": ["getDescription.js"]
}
]
}
Ceci est la dernière solution:
popup.js
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {greeting: "hello"}, function(response) {
console.log(response.farewell);
});
});
(Note: l'console.log ci-dessus (response.farewell) est pour popup.html, pas votre onglet en cours)
de contentscript.js
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.greeting == "hello")
sendResponse({farewell: "goodbye"});
});
- 1. Accès à l'objet DOM de l'onglet en cours à partir d'une extension Chrome
- 2. Comment puis-je accéder à la page contextuelle DOM à partir de la page bg dans l'extension Chrome?
- 3. Accéder à un noeud DOM
- 4. accéder à Excelfile à partir de ressources
- 5. Accéder à Excel.ComboBox à partir de C#
- 6. Générer du code source HTML à partir de DOM DOM
- 7. comment accéder à une variable d'extension firefox à partir du document/fenêtre en cours
- 8. Accéder à proc_dir_entry à partir de proc_fops.open?
- 9. Accéder à infobright à partir de Java
- 10. Accéder à l'iPhone à partir de Windows
- 11. Accéder à SurfaceWindow à partir de TagVisualization
- 12. Comment accéder à un objet COM en cours d'exécution à l'aide de .NET Interop?
- 13. call popup.html Fonction javascript à partir de la page d'arrière-plan
- 14. Comment accéder à app.config/web.config pour l'application en cours?
- 15. Comment accéder à l'enregistrement en cours dans un asp: Repeater?
- 16. Récupération de l'activité en cours à partir du thread
- 17. Erreur tâche Rake en cours d'exécution à partir de l'IDE
- 18. NoClassDefFoundError en cours d'exécution à partir de jar
- 19. C# FMOD en cours de lecture à partir du flux
- 20. Comment puis-je accéder à l'URI en cours dans le système de mako de python?
- 21. Accéder au projet 2008 en cours d'exécution sur localhost à partir d'un vm
- 22. DJANGO - Comment accéder à l'instance de modèle en cours à l'intérieur d'un formulaire?
- 23. ASP.NET Accéder à la session en cours à l'aide de jQuery
- 24. Accéder à du contenu JavaScript dynamique à partir de onclick
- 25. Comment accéder à une variable PHP à partir de JavaScript?
- 26. Accéder à "current class" à partir de WPF custom MarkupExtension
- 27. Comment puis-je accéder à dataGridColumn à partir de itemRenderer?
- 28. Accéder à RPG sur iSeries à partir de Java
- 29. accéder à tabcontrol à partir myclass.cs
- 30. Accéder à SQL Server à partir de Solaris
Je veux dire avec le DOM est Document Object Model ... merci –
Oui, ce que je vous ai montré dans mon exemple est la messagerie synchrone fait dans les extensions Chrome. J'ai renvoyé une chaîne "The Dom que vous voulez obtenir", mais en réalité, vous pouvez retourner n'importe quel DOM que vous voulez. Si vous voulez obtenir tout dans le corps, vous pouvez faire "sendResponse ({dom: document.getElementsByTagName (" body ") [0]});" –
l'exemple ci-dessus fonctionne-t-il? Une réponse AFAIK send sérialisera le dom comme json ce qui est susceptible d'entraîner une erreur due à la structure circulaire de l'objet dom. –