J'utilise la balise object pour charger un extrait de code HTML dans une page HTML.
Mon code ressemble à ceci:
<html><object data="/html_template"></object></html>
Comme prévu après le chargement de la page, des éléments ont été ajoutés entre les balises d'objet ..__ Je souhaite obtenir ces éléments, mais il me semble impossible d'y accéder.
J'ai essayé ce qui suit $("object").html()
$("object").children()
$("object")[0].innerHTML
Aucun de ceux-ci ne semble fonctionner. Y a-t-il un autre moyen d'obtenir ces éléments?
MODIFIER:
Un exemple plus détaillé:
considère ceci
<html><object data="http://www.YouTube.com/v/GGT8ZCTBoBA?fs=1&hl=en_US"></object></html>
Si j'essaie d'obtenir le code HTML dans l'objet, je reçois une chaîne vide.
Non, il n'est pas possible d'avoir accès à un cadre cross-Origin!
Tant que vous le placez sur le même domaine, vous pouvez effectuer les opérations suivantes:
HTML
<html>
<object id="t" data="/html_template" type="text/html">
</object>
</html>
JavaScript
var t=document.querySelector("#t");
var htmlDocument= t.contentDocument;
La innerHTML
fournira un accès au code HTML situé entre le <object>
et le </object>
. Ce qui est demandé, c'est comment obtenir le code HTML chargé par l'objet à l'intérieur de la fenêtre/du cadre qu'il produit (cela n'a rien à voir avec le code entre les balises open et close).
Je cherche aussi une réponse à cela et j'ai bien peur qu'il n'y en ait pas. Si j'en trouve un, je reviendrai et le posterai ici mais je cherche (et pas seul) depuis longtemps maintenant.
Je sais que c'est une vieille question, mais voilà ...
Je l'ai utilisé sur un site Web personnel et l'ai finalement intégré dans certains projets de travail, mais c'est comme cela que je m'accroche au domaine d'un svg. Notez que vous devez l'exécuter après le chargement de la balise d'objet (pour pouvoir la déclencher avec une fonction onload). Cela peut nécessiter une adaptation pour les éléments non-svg.
function hooksvg(elementID) { //Hook in the contentDocument of the svg so we can fire its internal scripts
var svgdoc, svgwin, returnvalue = false;
var object = (typeof elementID === 'string' ? document.getElementById(elementID) : elementID);
if (object && object.contentDocument) {
svgdoc = object.contentDocument;
}
else {
if (typeof object.getSVGDocument == _f) {
try {
svgdoc = object.getSVGDocument();
} catch (exception) {
//console.log('Neither the HTMLObjectElement nor the GetSVGDocument interface are implemented');
}
}
}
if (svgdoc && svgdoc.defaultView) {
svgwin = svgdoc.defaultView;
}
else if (object.window) {
svgwin = object.window;
}
else {
if (typeof object.getWindow == _f) {
try {
svgwin = object.getWindow();//TODO look at fixing this
}
catch (exception) {
// console.log('The DocumentView interface is not supported\r\n Non-W3C methods of obtaining "window" also failed');
}
}
}
//console.log('svgdoc is ' + svgdoc + ' and svgwin is ' + svgwin);
if (typeof svgwin === _u || typeof svgwin === null) {
returnvalue = null;
} else {
returnvalue = svgwin;
}
return returnvalue;
};
Si vous voulez récupérer les éléments de symbole du dom pour le svg, votre fonction onload pourrait ressembler à ceci:
function loadedsvg(){
var svg = hooksvg('mysvgid');
var symbols = svg.document.getElementsByTagName('symbol');
}
Essaye ça:
// wait until object loads
$('object').load(function() {
// find the element needed
page = $('object').contents().find('div');
// alert to check
alert(page.html());
});
Vous pouvez utiliser le code suivant pour lire les données d'objet une fois qu'elles sont complètement chargées et appartiennent au même domaine:
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);
});
J'espère que cela t'aides!
Voici un exemple de code qui fonctionne. Vous ne savez pas quel est le problème avec votre code.
<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>