Iframe Webextension


(Alejandro) #1

Hola!
Tengo varios complementos que quiero migrar a WebExtensions. Con los que tengo problemas son unos que son más o menos igual: embeben dentro de un iframe otra web. Por ejemplo: https://addons.mozilla.org/es/firefox/addon/gdrive-panel/.
Lo que hace es meter adentro de un iframe (en este caso es un tag “browser” pero es lo mismo). Este iframe está en un panel que se abre con un botón.
Hasta ahora no había tenido problemas y los complementos andan bien (tienen varios miles de usuarios activos).

Bueno, acá el problema: cuando quiero hacer lo mismo en Webextensios, me da el error Load denied by X-Frame-Options: https://drive.google.com/drive/ does not permit cross-origin framing.

No entiendo por qué un iframe en los viejos complementos anda bien y en las nuevas webextensions no. Hay alguna forma de hacer esto?

Muchas gracias!


(Jorge) #2

Las APIs de WebExtensions respetan el CSP de las páginas donde inyectan scripts, así que creo que esa es la razón. Tal vez esto ayude:


(Alejandro) #3

Perdón por las demora pero gracias por responder!
Encontré una forma, en otra webExtension, para hacer que “funcione”. Es agregar el siguiente código en un background script:

function headerHandler(info) {
  var headers = info.responseHeaders;
  for (var i = headers.length - 1; i >= 0; --i) {
    var header = headers[i].name.toLowerCase();
    if (header == "frame-options" || header == "x-frame-options") {
      headers.splice(i, 1);
    }
  }
  return { responseHeaders: headers };
};

chrome.webRequest.onHeadersReceived.addListener(
  headerHandler,
  {urls: ["*://*/*"],types: ["sub_frame"]},
  ["blocking", "responseHeaders"]
);

De todas formas no me sirvió de mucho ya que el iframe se carga cada vez que se abre el panel/popup y pierde la funcionalidad que tenía mi complemento.

Bueno, venía a agradecer y a dejar el código ahi que a alguien le puede servir.

Saludos!