Saltar al contenido

Obtener el objeto de documento de un iframe

Solución:

Prueba lo siguiente

var doc=document.getElementById("frame").contentDocument;

// Earlier versions of IE or IE8+ where !DOCTYPE is not specified
var doc=document.getElementById("frame").contentWindow.document;

Nota: AndyE señaló que contentWindow es compatible con todos los navegadores principales, por lo que puede ser la mejor manera de hacerlo.

  • http://help.dottoro.com/ljctglqj.php

Nota 2: En esta muestra, no podrá acceder al documento por ningún medio. El motivo es que no puede acceder al documento de un iframe con un origen diferente porque infringe la política de seguridad “Mismo origen”.

  • http://javascript.info/tutorial/same-origin-security-policy

Este es el código que utilizo:

var ifrm = document.getElementById('myFrame');
ifrm = (ifrm.contentWindow) ? ifrm.contentWindow : (ifrm.contentDocument.document) ? ifrm.contentDocument.document : ifrm.contentDocument;
ifrm.document.open();
ifrm.document.write('Hello World!');
ifrm.document.close();

contentWindow frente a contentDocument

  • IE (Win) y Mozilla (1.7) devolverán el objeto de ventana dentro del iframe con oIFrame.contentWindow.
  • Safari (1.2.4) no comprende esa propiedad, pero tiene oIframe.contentDocument, que apunta al objeto del documento dentro del iframe.
  • Para hacerlo aún más complicado, Opera 7 usa oIframe.contentDocument, pero apunta al objeto de ventana del iframe. Debido a que Safari no tiene forma de acceder directamente al objeto de ventana de un elemento iframe a través del DOM estándar (¿o no?), Nuestro código totalmente moderno compatible con navegadores cruzados solo podrá acceder al documento dentro del iframe.

Para aún más robustez:

function getIframeWindow(iframe_object) {
  var doc;

  if (iframe_object.contentWindow) {
    return iframe_object.contentWindow;
  }

  if (iframe_object.window) {
    return iframe_object.window;
  } 

  if (!doc && iframe_object.contentDocument) {
    doc = iframe_object.contentDocument;
  } 

  if (!doc && iframe_object.document) {
    doc = iframe_object.document;
  }

  if (doc && doc.defaultView) {
   return doc.defaultView;
  }

  if (doc && doc.parentWindow) {
    return doc.parentWindow;
  }

  return undefined;
}

y

...
var el = document.getElementById('targetFrame');

var frame_win = getIframeWindow(el);

if (frame_win) {
  frame_win.targetFunction();
  ...
}
...
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *