Sto sviluppando un'estensione per il browser Google Chrome. Non riuscivo a capire come accedere alla scheda corrente oggetto DOM dalla pagina "popup.html". qualche suggerimento?Accesso all'oggetto DOM della scheda corrente da "popup.html"?
risposta
Per impostazione predefinita, all'interno di popup.js/popup.html, l'oggetto "documento" si riferisce solo al documento della finestra popup dell'estensione. Per ottenere il DOM per una scheda specifica (ad esempio la scheda attualmente attiva), è necessario utilizzare content scripts communications. Per esempio abbiamo bisogno di inviare una richiesta del extension allo script contenuti tramite popup, così nel popup.html si fa qualcosa di simile:
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);
});
});
Ora nello script contenuti, abbiamo bisogno di listen for those events proveniente dal estensione, quindi in un certo file che abbiamo chiamato 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..
});
Ora ricordatevi di impostare il manifest per includere lo script contenuti e il permesso scheda.
Questa risposta sembra non funzionare con l'ultima API. Questo è un esempio funzionante.
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({});
}
});
};
parti rilevanti della manifest.json:
{
"permissions": [
"tabs"
],
"content_scripts": [
{
"matches": ["http://*/*", "https://*/*"],
"js": ["getDescription.js"]
}
]
}
Questa è l'ultima correzione:
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);
});
});
(Nota: quanto sopra console.log (response.farewell) è per popup.html, non la vostra scheda corrente)
contentscript.js
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.greeting == "hello")
sendResponse({farewell: "goodbye"});
});
- 1. Come si aprono i collegamenti popup.html nella scheda?
- 2. Estensione Chrome: ottieni la scheda corrente dal popup
- 3. Chiudi scheda corrente
- 4. Accesso all'oggetto DOM dopo la chiamata AJAX?
- 5. Schede dell'interfaccia utente jQuery: visualizza l'indice della scheda corrente
- 6. Cambia scheda corrente da notifica nell'estensione Google Chrome
- 7. Come posso ottenere l'URL della scheda corrente da un'estensione Google Chrome?
- 8. Accesso agli oggetti DOM della finestra principale da jQuery DOMWindow caricato con iFrame
- 9. Accesso a "tasti multimediali" da una scheda del browser
- 10. Ottieni frammento corrente dalla scheda ActionBar
- 11. Estensione Google Chrome - Accesso al DOM
- 12. Accesso a DOM in Angular 2 RC
- 13. come impostare l'icona della barra della scheda iphone da immagini personalizzate utilizzando la scheda storyboard
- 14. Ottieni la scheda attiva corrente tramite JS.
- 15. Accesso alla "classe corrente" da WPF personalizzato MarkupExtension
- 16. ipython: accesso alla figura corrente()
- 17. Avviso non visualizzato in popup.html dell'estensione chrome
- 18. Come programmazione estensione Chrome aperta popup.html
- 19. Accesso "Pagina Modifica URL scheda" dalla pagina
- 20. accesso alla pagina html corrente dall'estensione chrome
- 21. Ottenere oggetto DOM corrente TouchMove o touchend è di oltre
- 22. Come posso rilevare il tipo mime della scheda corrente in un'estensione Google Chrome?
- 23. Corrente di accesso Modello in primavera-mvc
- 24. Come ottengo il DOM corrente con Selenium Java 2.8?
- 25. Get URL della pagina corrente in Chrome estensione
- 26. Come si imposta il titolo della scheda terminale da Node.js?
- 27. Posso ottenere la fonte originale della pagina (vs DOM corrente) con phantomjs/casperjs?
- 28. Contenuti della scheda ActionBar sovrapposti
- 29. Come impostare la scheda corrente in viewpager con tablayout
- 30. Conferma prima della chiusura della scheda/browser
Voglio dire che il DOM è Document Object Model ... grazie –
Sì, quello che ti ho mostrato nel mio esempio è la messaggistica sincrona fatta in Chrome Extensions. Ho restituito una stringa "La dom che vuoi ottenere", ma in realtà, puoi restituire qualsiasi DOM che desideri. Se vuoi ottenere tutto nel corpo puoi fare "sendResponse ({dom: document.getElementsByTagName (" body ") [0]});" –
funziona l'esempio precedente? La risposta di invio di AFAIK serializzerà la dom come json che potrebbe causare un errore a causa della struttura circolare dell'oggetto dom. –