wake-up-neo.net

Wie bekomme ich HTML-Elemente aus einem Objekt-Tag?

Ich benutze das object-Tag, um ein HTML-Snippet innerhalb einer HTML-Seite zu laden.

Mein Code sieht folgendermaßen aus:

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

Wie erwartet, werden nach dem Laden der Seite einige Elemente zwischen den Objekt-Tags hinzugefügt. Ich möchte diese Elemente erhalten, scheint aber nicht darauf zuzugreifen.

Ich habe folgendes ausprobiert $("object").html()$("object").children()$("object")[0].innerHTML

Nichts davon scheint zu funktionieren. Gibt es eine andere Möglichkeit, diese Elemente zu erhalten?

BEARBEITEN:

Ein detaillierteres Beispiel:

bedenken Sie

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

Wenn ich versuche, das HTML in das Objekt zu bekommen, bekomme ich eine leere Zeichenfolge.

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

18
Noam

Nein, es ist nicht möglich, auf einen Cross-Origin-Frame zuzugreifen!

1
AHméd Net

Solange Sie es auf derselben Domain platzieren, können Sie Folgendes tun:

HTML

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

JavaScript

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

Die Variable innerHTML ermöglicht den Zugriff auf die HTML-Datei, die sich zwischen <object> und </object> befindet. Es wird gefragt, wie die HTML-Datei vom Objekt innerhalb des Fensters/Frames geladen wird, das gerade erzeugt wird (dies hat nichts mit dem Code zwischen den Tags open und close zu tun).

Ich suche auch nach einer Antwort darauf und fürchte, es gibt keine. Wenn ich einen finde, komme ich zurück und poste ihn hier, aber ich schaue (und nicht alleine) jetzt viel Zeit auf.

11
georgosn

Ich weiß, das ist eine alte Frage, aber hier geht es ...

Ich habe dies auf einer persönlichen Website verwendet und schließlich in einigen Arbeitsprojekten implementiert, aber so hakt ich mich in den Dom eines SVG ein. Beachten Sie, dass Sie dies ausführen müssen, nachdem das Object-Tag geladen wurde (damit Sie es mit einer Onload-Funktion auslösen können). Für Nicht-SVG-Elemente kann eine Anpassung erforderlich sein.

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;
};

Wenn Sie die Symbolelemente aus dem dom für die svg abrufen möchten, könnte Ihre Onload-Funktion folgendermaßen aussehen:

function loadedsvg(){
   var svg = hooksvg('mysvgid');
   var symbols = svg.document.getElementsByTagName('symbol');
}
0
Rexx Magnus

Versuche dies:

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

Sie könnten den folgenden Code verwenden, um Objektdaten zu lesen, sobald sie vollständig geladen wurden und sich in derselben Domäne befinden:

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);
});

Hoffe das hilft!

0
shabbir.rang

Hier ein Beispielcode, der funktioniert. Nicht sicher, was das Problem mit Ihrem Code ist.

<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>
0
rAm