2011-04-09 51 views
16

Tengo un archivo: 1.html y iframe dentro de él.
Quiero acceder a un elemento (digamos myelement) que existe en 1.html (fuera del iframe) del iframe.
¿Cómo puedo hacer eso?
me trataron:Accediendo a un elemento fuera del iframe

top.getElementById("myelement") 
top.document.getElementById("myelement") 
parent.getElementById("myelement") 
parent.document.getElementById("myelement") 

pero no funcionó !!

+0

posible duplicado de [iframe accediendo al DOM principal?] (http://stackoverflow.com/questions/2620755/iframe-accessing-parent-dom) – lulalala

Respuesta

30

La comunicación entre un iframe y el documento principal no es posible para recursos de origen cruzado. Solo funcionará si el iframe y la página que lo contiene provienen del mismo host, puerto y protocolo, p. Ej. http://example.com:80/1.html y http://example.com:80/2.html

Para los recursos de origen cruzado, se puede hacer uso de window.postMessage para la comunicación entre los dos, pero esto sólo es útil si el navegador es compatible con este método y si tiene control sobre ambos recursos. Hay información más detallada sobre window.postMessage en la página MDC: https://developer.mozilla.org/en/DOM/window.postMessage

Editar - suponiendo que ambos recursos son del mismo origen

En el marco flotante, window.parent se refiere al objeto global del documento de nivel superior, no el objeto del documento en sí. Creo que tendría que utilizar parent.document.getElementById

+0

parent.document.getElementById funciona !!! Tal vez pasé por alto este ... Tuve que comunicarme entre el documento original (jsp) y el iframe (también jsp) ... Fue muy complejo involucrar al bean de sesión ... Lo perdí en algún lugar ... Gracias de nuevo. – user646093

+0

Algo que encontré relevante para esto, si usa parent.myfunction() para llamar a una función en la página principal, aún necesita hacer esto para llegar a esos elementos. al menos lo hice usando Firefox. –

+0

'parent.document.getElementById' funciona bien ... Gracias –

-6

La comunicación entre un iframe y documento de nivel superior no es posible de recursos de origen cruzado

que es de muchas maneras mal, yo no quiero saber por dónde empezar. Por supuesto, las solicitudes de dominios cruzados y los intercambios de algoritmos tienen una larga historia, están bien documentados y funcionan ahora, uno puede iniciar solicitudes JSON o incluso solicitudes simples XMLHttp a través de JQuery, por ejemplo, incluso puede cargar archivos .js completos. archivos Y inyéctelos en su código; el código de inyección en fuentes remotas necesitará, por supuesto, una interfaz adecuada; uno puede lograr tal cosa a través de la comunicación con las personas responsables, simplemente pregúnteles amablemente y tal vez cooperarán si su proyecto tiene sentido y tiene su uso.

Para responder a la pregunta: el acceso a documentos completos plantearía la necesidad de transferirlo de antemano; recomendaría XML para ese propósito porque el árbol DOM y el XML son casi intercambiables. Cargue el árbol a través de .get (.ajax para hosts remotos), append a este y acceda como desee ... suena fácil y si tiene experiencia, ES FÁCIL. Si alguna vez lees "dominio cruzado" y "no es posible" en la misma oración, también puedes ignorar el cartel: hay mucha gente que no sabe de lo que están hablando ;-)

+5

De lo que estás hablando es básicamente de raspado html del lado del cliente. No parece que eso es lo que OP quiere hacer. Y en términos de "dominio cruzado" y "imposible" ... las personas han pasado por MUCHOS problemas para evitar que los iframes accedan a Windows desde otros dominios. No creo que hayas entendido la pregunta muy bien. –

Cuestiones relacionadas