2012-01-10 15 views
16

Estoy usando la etiqueta de objeto para cargar un fragmento de html dentro de una página html.¿Cómo obtener elementos html de una etiqueta de objeto?

Mi código es algo como lo siguiente:

<html><object data="/html_template"></object></html>

Como era de esperar después de la página se carga se añaden algunos elementos entre las etiquetas de objeto. Quiero obtener esos elementos, pero parece que no puedo acceder a ellos.

He intentado lo siguiente $("object").html()$("object").children()$("object")[0].innerHTML

Ninguno de ellos parece funcionar. ¿Hay alguna otra forma de obtener esos elementos?

EDIT:

Un ejemplo más detallado:

consideran que este

<html><object data="http://www.YouTube.com/v/GGT8ZCTBoBA?fs=1&hl=en_US"></object></html>

Si trato de obtener el html dentro del objeto consigo una cadena vacía.

http://jsfiddle.net/wwrbJ/1/

+0

¿'' $ ("object") 'devuelve algo? –

+0

Si mi suposición es correcta, es posible que esté utilizando el navegador IE, ¿verdad? – AmGates

+0

Sí $ ("objeto") devuelve algo. Y vamos, no estoy usando IE – Noam

Respuesta

9

El innerHTML provid el acceso al código HTML que se encuentra en entre el <object> y </object>. Lo que se pregunta es cómo obtener el html cargado por el objeto dentro de la ventana/marco que está produciendo (no tiene nada que ver con el código entre las etiquetas de abrir y cerrar).

También estoy buscando una respuesta a esto y me temo que no hay ninguno. Si encuentro uno, volveré y lo publicaré aquí, pero estoy buscando (y no solo) durante mucho tiempo.

0

Prueba esto:

// wait until object loads 
$('object').load(function() { 
    // find the element needed 
    page = $('object').contents().find('div'); 
    // alert to check 
    alert(page.html()); 
}); 
+0

$ ('object'). Contents() devuelve [] para mí – Noam

+0

$ ('object'). Contents() es una colección, tienes que buscar un elemento dentro de ese objeto –

+1

intente utilizar: $ ('object'). Contents(). Find ('html'). Html(); –

0

Aquí va una pieza de muestra de código que funciona. No estoy seguro de cuál es el problema con tu código.

<html> 
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
<script type="text/javascript"> 
    $(document).ready(function(){ 
      var k = $("object")[0].innerHTML; 
      alert(k); 
      $("object")[0].innerHTML = "testing"; 
     }); 
</script> 
<object data="/html_template">hi</object> 
</html> 
13

Mientras lo coloca en el mismo dominio que puede hacer lo siguiente:

HTML

<html> 
    <object id="t" data="/html_template" type="text/html"> 
    </object> 
</html> 

JavaScript

var t=document.querySelector("#t"); 
var htmlDocument= t.contentDocument; 
0

Usted podría utilizar el siguiente código para leer datos de objetos una vez que se carga completamente y es del mismo dominio:

HTML-

<html> 
<div class="main"> 
<object data="/html_template"> 
</object> 
</div> 
</html> 

Jquery-

$('.main object').load(function() { 
    var obj = $('.main object')[0].contentDocument.children; 
    console.log(obj); 
}); 

Espero que esto ayude!

-2

ACTUALIZADO

he usado esta línea de Javascript para cambiar el valor de una entrada de archivos dentro de un iframe,

document.getElementById('iframeID').contentWindow.document.getElementById('inputID').value = 'Your Value';

Referencia: https://stackoverflow.com/a/14451440/3452102

0

No, no es ¡Es posible acceder a un marco de origen cruzado!

Cuestiones relacionadas