Estoy desarrollando una extensión para el navegador Google Chrome. No pude encontrar la forma de acceder al objeto DOM de la pestaña actual desde la página "popup.html". alguna sugerencia?Acceso al objeto DOM de la pestaña actual desde "popup.html"?
Respuesta
De forma predeterminada, dentro de popup.js/popup.html, el objeto "documento" hace referencia solo al documento de la ventana emergente de la extensión. Para obtener DOM para una pestaña específica (por ejemplo, la pestaña actualmente activa), necesitaría usar content scripts communications. Por ejemplo tenemos que enviar una solicitud de la extension a su contenido a través de la escritura popup, por lo que en el popup.html haces algo como esto:
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);
});
});
Ahora en el guión de contenido, necesitamos listen for those events procedente de la extensión, por lo que en algún archivo nombramos 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..
});
Ahora recuerden a la configuración de su manifest para incluir el guión contenido y el permiso pestaña.
Parece que esta respuesta no funciona con la API más reciente. Este es un ejemplo de trabajo.
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({});
}
});
};
partes pertinentes de manifest.json:
{
"permissions": [
"tabs"
],
"content_scripts": [
{
"matches": ["http://*/*", "https://*/*"],
"js": ["getDescription.js"]
}
]
}
Ésta es la última solución:
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: el console.log anterior (response.farewell) es para popup.html, no su ficha actual)
contentscript.js
chrome.runtime.onMessage.addListener(
function(request, sender, sendResponse) {
if (request.greeting == "hello")
sendResponse({farewell: "goodbye"});
});
- 1. Asp.Net Acceso global.asax al objeto de página solicitado actual
- 2. Acceso al objeto GridViewColumnHeader desde GridViewColumn
- 3. ¿Cómo hacer enlaces popup.html abiertos en la pestaña?
- 4. Acceso al objeto Host desde la clase T4
- 5. Eclipse salta al acceso directo de la pestaña Editor
- 6. Twitter Bootstrap Carrusel: acceso al índice actual
- 7. Objeto de solicitud de acceso desde REST
- 8. Acceso al objeto Solicitud desde etiquetas JSP personalizadas
- 9. objeto de acceso desde un hilo diferente
- 10. Objeto instanciado XAML de acceso desde C#
- 11. Extensión de Chrome: icono de extensión en clic, abra popup.html en la nueva pestaña
- 12. Cambiando pestaña actual en Rails
- 13. ¡Juego! 2.0 Scala - Acceso al objeto global
- 14. cómo obtener la pestaña actual de la página de fondo
- 15. pestaña actual de actualización de Firefox desde la línea de comandos
- 16. Wikipedia API - Acceso al objeto JSON
- 17. Acceso al sistema de archivos desde la extensión de Firefox
- 18. Abrir una URL en la pestaña/ventana actual desde una extensión de Firefox
- 19. Validar la manipulación DOM al usar Selenium
- 20. jQuery objeto y elemento DOM
- 21. Distinga el enlace abierto en la pestaña actual frente a la nueva pestaña
- 22. Detectar objeto DOM frente a objeto jQuery
- 23. ¿Cómo obtener acceso al JUnitCore actual para agregar un oyente?
- 24. javascript acceso de objeto rendimiento
- 25. Cómo acceder al objeto Spring @Service desde la prueba jUnit
- 26. Acceso al servidor Apache local desde la casilla virtual
- 27. MVVM Modelo de acceso desde la vista
- 28. jQuery: Accediendo al iframe dom desde el mismo iframe
- 29. consola de Safari/WebKit.log nodo DOM como objeto?
- 30. Cómo hacer referencia al objeto de iteración actual en manubrios
Quiero decir con el DOM es el Modelo de Objeto de Documento ... gracias –
Sí, lo que le mostré en mi ejemplo es la mensajería sincrónica hecha en Extensiones de Chrome. Le devolví una cadena "La dom que desea obtener", pero en realidad, puede devolver cualquier DOM que desee. Si quiere obtener todo en el cuerpo, puede hacer "sendResponse ({dom: document.getElementsByTagName (" body ") [0]});" –
¿funciona el ejemplo anterior? La respuesta de envío de AFAIK serializará el dom como json, lo que probablemente genere un error debido a la estructura circular del objeto dom. –