¿Cómo obtener contenido de este XRayWrapper?

En un complemento de Firefox, me gustaría enviar una solicitud HTTP a la URL del botón en este sitio web: www.google.com/ads/preferences. Lo que trato de hacer es obtener el formulario que contiene el botón y realizar una solicitud HTTP al atributo de acción (el objetivo es obtener las cookies de doble clic que envía el servidor si hace eso). El problema es que cuando me sale el formulario me sale un XRayWrapper y no se como recuperar ese atributo (ya lo he intentado hacer:

// unwrap is not available on older branches (3.5 and 3.6) - Bug 533596
if (XPCNativeWrapper && "unwrap" in XPCNativeWrapper) {
try {
  return XPCNativeWrapper.unwrap(thing);
} catch(e) {
  // Unwrapping will fail for JS literals - numbers, for example. Catch
  // the exception and proceed, it will eventually be returend as-is.
}
}

if (thing['wrappedJSObject']) {
return thing.wrappedJSObject;
}

Además, descubrí que cuando obtengo el div con id="content-pane" que contiene el formulario y el acceso al HTML interno, obtengo una cadena vacía. Pero debe ser posible porque puedo ver estos contenidos con firebug, que es otro complemento...

Estoy realmente perdido, gracias por su ayuda!

EDITAR: estoy usando el SDK adicional, así que creé un trabajador de página para manejar todo esto:

createDoubleClick: function() {
    new PageWorker.Page({
      contentURL: "http://www.google.com/ads/preferences",
      contentScriptFile: data.url('contentScripts/getCookie.js'),
      contentScriptWhen: "end",
      onMessage: function(message) {    
        console.log(message);                                   
      }                                       
    });                 
}

Luego, en el contetScript trato de obtener el DOM:

// Get button 
var idPanel = "content-pane";

// Get content panel
var panel = document.getElementById(idPanel);

console.log(panel.innerHTML);

Resultado:

info: 

preguntado el 12 de junio de 12 a las 08:06

1 Respuestas

El único escenario en el que desearía eliminar ese envoltorio sería una extensión que desea interactuar con el código JavaScript de una página web, e incluso entonces es dudoso si debemos hazlo. En este escenario particular definitivamente no deberías hacerlo. XrayWrapper (anteriormente conocido como XPCNativeWrapper) es un capa de seguridad destinada a proteger su extensión. Todavía puede acceder a cualquier método y atributo DOM a través de él, tal como lo haría normalmente:

var url = form.getAttribute("action");

Si esta llamada no devuelve nada, lo más probable es que el action el atributo simplemente no está configurado cuando intenta acceder a él. Es posible que deba esperar más tiempo, por ejemplo, ejecute su código en el load controlador de eventos en lugar de DOMContentLoaded (obviamente, no sé lo que estás haciendo actualmente).

Respondido el 12 de junio de 12 a las 09:06

en primer lugar, gracias por su rápida respuesta. Edité y describí más lo que realmente estoy haciendo. Como puede ver, ejecuto el trabajador con "contentScriptWhen: "end"", supongo que entonces ya debería estar cargado, pero no obtengo nada a través de la consola cuando obtengo el HTML interno del panel. - Synack

el objetivo de todo esto es conseguir que las cookies de esa httprequest se carguen en el navegador. - Synack

@ Kits89: La página se cargará entonces, seguro. Pero sus contenidos se están generando dinámicamente, en un load controlador de eventos si lo veo correctamente. Si pones todo tu código en setTimeout(function() { ... }, 0) (retrasarlo mínimamente) entonces debería funcionar. - Wladimir Palant

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.