2012-01-11 25 views
19

Actualmente estoy tratando de personalizar OpenCms (CMS de código abierto basado en Java) un poco, que está usando FCKEditor embedded, que es a lo que intento acceder usando js/jQuery .Obteniendo el contenido html de un iframe usando jQuery

Intento buscar el contenido html del iframe, sin embargo, obteniendo siempre nulo como devolución. Esta es la forma en que trato de buscar el contenido HTML del iframe:

var editFrame = document.getElementById('ta_OpenCmsHtml.LargeNews_1_.Teaser_1_.0___Frame'); 
alert($(editFrame).attr('id'));   // returns the correct id 
alert($(editFrame).contents().html()); // returns null (!!) 

En cuanto a la pantalla, el lo que quiera acceder a la es la sección HTML la 'LargeNews1/Teaser', que actualmente tiene los valores "Newsline en ... ". A continuación, también puede ver la estructura html en Firebug.

Sin embargo, $(editFrame).contents().html() devuelve nulo y no puedo entender por qué, mientras que $(editFrame).attr('id') devuelve la identificación correcta.

El contenido iframe/FCKEditor está en el mismo sitio/dominio, no hay problemas entre sitios.

enter image description here

código HTML de marco flotante está en http://pastebin.com/hPuM7VUz

Actualizado:

aquí es una solución que funcione:

var editArea = document.getElementById('ta_OpenCmsHtml.LargeNews_1_.Teaser_1_.0___Frame').contentWindow.document.getElementById('xEditingArea');       
$(editArea).find('iframe:first').contents().find('html:first').find('body:first').html('some <b>new</b><br/> value'); 

Respuesta

46

.Contenido() html() no funciona para obtener el código html de un iframe.. Puede hacer lo siguiente para conseguirlo:

$(editFrame).contents().find("html").html(); 

que debe devolver todo el html en el marco flotante para usted. O puede usar "cuerpo" o "cabeza" en lugar de "html" para obtener esas secciones también.

+0

Gracias, muchas respuestas útiles en total; Edité mi pregunta y agregué la solución final en la parte inferior. –

+2

Esto funciona en Firefox, pero no en Chrome. Acabo de obtener . – user3411192

2

que sugieren la sustitución de la primera línea con:

var editFrame = $('#ta_OpenCmsHtml.LargeNews_1_.Teaser_1_.0___Frame'); 

... y la expresión de alerta segundo con:

editFrame.html() 

Si, por el contrario, prefiere realizar la misma w/o jQuery (mucho más frío, en mi humilde opinión) sólo podría utilizar JavaScript:

var editFrame = document.getElementById('ta_OpenCmsHtml.LargeNews_1_.Teaser_1_.0___Frame'); 
    alert(editFrame.innerHTML); 
+0

jQuery no funciona bien con los DIV que tienen puntos.en la identificación, y no puedo cambiar la identificación del componente FCKEditor (fácilmente) desafortunadamente. Voy a probar las sugerencias anteriores y publicaré la resolución más tarde, que finalmente utilicé. Gracias a todos. –

0

Su iframe:

<iframe style="width: 100%; height: 100%;" frameborder="0" aria-describedby="cke_88" title="Rich text editor, content" src="" tabindex="-1" allowtransparency="true"/> 

podemos obtener los datos de este iframe como:

var content=$("iframe").contents().find('body').html(); 
alert(content); 
Cuestiones relacionadas