Dora: ID´s aus iFrame

Hallo

ich versuche gerade in einem IFrame mittels JS eine ID auszulesen. Als Beispiel versuche ich den Innertext der ID "Inhaltsverzeichnis" auf der Startseite von SelfHTML auszugeben (Text = "Inahltsverzeichnis"). Leider klappt es nicht. Liegt das an dieser Same-Origin-Policy? Oder ist das bei mir nur ein Syntaxfehler? Habe gerade erst angefangen mit JavaScript zu arbeiten. Unten mein Code, wie er leider nicht funktioniert:

<!doctype html>
<html lang="de">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    
	<title>Iframe Test</title>
	
  </head>
  <body>
    <p>Iframe Test</p>
	
	
	<iframe src="https://wiki.selfhtml.org/wiki/Startseite" id="iframe"></iframe>
        <script> var Text = document.getElementById("Inhaltsverzeichnis").innerText
         document.write("<p> " + Text + " </p>")

  </body>
</html>	

p.s.: Ist es überhaupt möglich Werte von anderen Seiten zu erhalten auch wenn diese nicht auf dem gleichen Server liegen bspw. mit JSONP, oder diesem Ajax?

  1. Hallo Dora,

    hast du dir mit console.log(text) die Ausgabe angesehen, wenn nicht kannst du das ja noch machen. Da steht dann meist das Problem beschrieben.

    Auf den Content/Code einer Seite einer anderen Domain zuzugreifen führt aber zu Problemen bzgl. der Same-Origin-Policy.

    Hier noch ein Code, um Elemente aus einem IFrame zu selektieren. Funktioniert aber auch nur, wenn alles auf dem gleichen Server liegt.

    https://forum.selfhtml.org/self/2018/feb/21/mit-jquery-ein-element-aus-einem-iframe-selektieren/1714289#m1714289

    Gruß ebody

  2. Hallo Dora,

    in deinem Code,

        <p>Iframe Test</p>
    	<iframe src="https://wiki.selfhtml.org/wiki/Startseite" id="iframe"></iframe>
            <script> var Text = document.getElementById("Inhaltsverzeichnis").innerText
             document.write("<p> " + Text + " </p>")
    

    … fehlt nicht nur der abschließende </script> Tag, sondern dein document-Objekt bezieht sich auf die Seite mit dem iframe, nicht die im iframe. Und in deinem Codebeispiel ist kein Element mit der entsprechenden ID vorhanden. (Lediglich das iframe-Element hat eine ID, „frame“.)

    p.s.: Ist es überhaupt möglich Werte von anderen Seiten zu erhalten auch wenn diese nicht auf dem gleichen Server liegen bspw. mit JSONP, oder diesem Ajax?

    Mit JavaScript kannst du möglicherweise nicht in den Frame hineingreifen. Wenn du lediglich Daten aus einer Ressource extrahieren möchtest, kannst du es mit XHR (AJAX, JSON) probieren, allerdings kommen dort bestimmte Sicherheitsrichtlinien zum Tragen, z.B. Same-Origin-Policy vs. Allow-Origin.

    Viele Grüße
    Robert