DieMelone: div container iframes

Hallo zusammen,

ist es möglich einen div container einer anderen Website bei der eigenen einzubinden via <iframe> ?

oder auf eine andere Art. Es geht nur um einen bestimmten Div Container.

Vielen Dank -DieMelone

  1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

    ist es möglich einen div container einer anderen Website bei der eigenen einzubinden via <iframe> ?

    oder auf eine andere Art. Es geht nur um einen bestimmten Div Container.

    Mit einem aktiven Backend (z. B. PHP) ohne größere technische Schwierigkeitn möglich. Nur rechtlich sollte es vorher geklärt sein.

    Ich habe mir dafür gerade ein paar kleine Funktionen mit der DOMDocument-Klassensammlung aus PHP erstellt.

    Spirituelle Grüße
    Euer Robert
    robert.r@online.de

    --
    Möge der wahre Forumsgeist ewig leben!
  2. Hallo

    ist es möglich einen div container einer anderen Website bei der eigenen einzubinden via <iframe> ?

    Nein. In einem Iframe kannst du nur ein vollständiges Dokument, keinen Ausschnitt davon, einbinden.

    oder auf eine andere Art. Es geht nur um einen bestimmten Div Container.

    Wenn du den Div-Container gedanklich loslässt und stattdessen ganz bestimmten Inhalt einbinden willst, der zufälligerweise auf einer anderen Seite in einem Div-Container ausgegeben wird, kannst du das mit einer serverseitigen Technik, z.B. Perl, PHP, Python, erledigen.

    Steht dir eine dieser Techniken (oder eine andere, siehe Beschreibung deines Hostingpakets) zur Verfügung?

    Tschö, Auge

    --
    Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war. Terry Pratchett, “Wachen! Wachen!
    1. Hallo,

      nein ich habe nichts der gleichen zur Verfügung. Nur CSS und HTML... Das heißt, dass das eher nicht möglich ist oder?

      1. @@DieMelone

        Das heißt, dass das eher nicht möglich ist oder?

        Nein. Wenn der entsprechende Abschnitt aber eine ID ("fragment") hat, kannst du aber die ganze Seite (http://example.net/path/page) in ein iframe einbinden und gleich zu dieser Stelle springen:

        <iframe src="http://example.net/path/page#fragment"></iframe>
        

        Erlaubnis des Seitenbetreibers vorausgesetzt.

        LLAP

        --
        „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
      2. Hallo,

        nein ich habe nichts der gleichen zur Verfügung. Nur CSS und HTML... Das heißt, dass das eher nicht möglich ist oder?

        Fast nichts ist unmöglich.

        Experimetiere mal mit einem div, in den du iframe einbettest und probiere, den iframe mit margin-top -500px (nur ein Beispiel) so zu schieben, dass du nur den gewünschten Teil der fremden Seite siehst.

        Linuchs

        1. deine Frage hat mich über eine Lösung meines Problems noch mal nachdenken lassen. Ich brauche etwas Vergleichbares aus einer Content Management System (CMS) Webseite, nämlich "Das Unternehmen".

          Ich habe PHP zur Verfügung und muss mal sehen, wie ich diesen CMS-Knoten durchschlage ...

          Linuchs

          1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

            deine Frage hat mich über eine Lösung meines Problems noch mal nachdenken lassen. Ich brauche etwas Vergleichbares aus einer Content Management System (CMS) Webseite, nämlich "Das Unternehmen".

            Ich habe PHP zur Verfügung und muss mal sehen, wie ich diesen CMS-Knoten durchschlage ...

            Willst Du aus der verlinkten Seite den Kasten "Das Unternehmen" ausschneiden und woanders wieder einfügen? Mit PHP und den DOMDocument-Klassen geht das ganz klasse, darum nennt man die ja so ;-)

            Spirituelle Grüße
            Euer Robert
            robert.r@online.de

            --
            Möge der wahre Forumsgeist ewig leben!
            1. Willst Du aus der verlinkten Seite den Kasten "Das Unternehmen" ausschneiden und woanders wieder einfügen?

              Genau.

              Mit PHP und den DOMDocument-Klassen geht das ganz klasse, darum nennt man die ja so ;-)

              Wie? Wenn ich die komplette "Fremd"-Seite mit PHP lese, habe ich einen String. Gibt es da PHP-Kommandos, DOM im String zu erkennen? (Freude) Dann bitte her damit.

              Hatte schon gegrübelt, wie ich das Ende eines mehrfach verschachtelten divs erkenne. Mich interessiert der nackte Teil-Text und die Zeilenumbrüche / Absätze.

              Linuchs

              1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

                Willst Du aus der verlinkten Seite den Kasten "Das Unternehmen" ausschneiden und woanders wieder einfügen?

                Genau.

                Mit PHP und den DOMDocument-Klassen geht das ganz klasse, darum nennt man die ja so ;-)

                Wie? Wenn ich die komplette "Fremd"-Seite mit PHP lese, habe ich einen String. Gibt es da PHP-Kommandos, DOM im String zu erkennen? (Freude) Dann bitte her damit.

                Hatte schon gegrübelt, wie ich das Ende eines mehrfach verschachtelten divs erkenne. Mich interessiert der nackte Teil-Text und die Zeilenumbrüche / Absätze.

                Die Ausarbeitung ist später Fleißsache, damit Du auch unter wechselnden Randbedingungen (ist ja schließlich eine Fremndseite) immer das richtige DIV findest oder eben eine Meldung, dass das nicht existiert.

                Ich probiere das anhand der von Dir verlinkten Seite mal aus, das entsprechende DIV zu extrahieren und melde mich dann wieder.

                Du kannst ja inzwischen schon mal überfliegen, was die Klassen so können:

                Spirituelle Grüße
                Euer Robert
                robert.r@online.de

                --
                Möge der wahre Forumsgeist ewig leben!
                1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

                  Willst Du aus der verlinkten Seite den Kasten "Das Unternehmen" ausschneiden und woanders wieder einfügen?

                  Genau.

                  Mit PHP und den DOMDocument-Klassen geht das ganz klasse, darum nennt man die ja so ;-)

                  Wie? Wenn ich die komplette "Fremd"-Seite mit PHP lese, habe ich einen String. Gibt es da PHP-Kommandos, DOM im String zu erkennen? (Freude) Dann bitte her damit.

                  Hatte schon gegrübelt, wie ich das Ende eines mehrfach verschachtelten divs erkenne. Mich interessiert der nackte Teil-Text und die Zeilenumbrüche / Absätze.

                  Die Ausarbeitung ist später Fleißsache, damit Du auch unter wechselnden Randbedingungen (ist ja schließlich eine Fremndseite) immer das richtige DIV findest oder eben eine Meldung, dass das nicht existiert.

                  Ich probiere das anhand der von Dir verlinkten Seite mal aus, das entsprechende DIV zu extrahieren und melde mich dann wieder.

                  Du kannst ja inzwischen schon mal überfliegen, was die Klassen so können:

                  Ich habe jetzt die Gehübungen soweit fertig, dass ich die gewünschten Daten ausschneiden kann und als HTML-Code in einer Datei abspeichern kann. Da das Dokument allerdings nicht wirklich sauber aufgebaut ist (1) und es andere in der Praxis auch nicht sein werden, müsste man nun ein skalierbares Tool draus machen, in dem man einfach Checkboxen anklickt, welche Inhalte man haben möchte.

                  (1) der Document-Baum springt ziemlich hin und her mit den Eltern-Kind-Beziehungen. Was optisch wie ein zusammengehöriger Bereich aussieht, ist leider eine ziemliche Hasenjagd.

                  Meine Testdatei ist jetzt auch noch ziemlich voll mit auskommentierten Zeilen, weil ich immer nur den Teil aktiv gelassen habe, der gerade gebraucht wurde. Du brauchst dann aber eigentlich alles, in jeweils passender Zusammensetzung.

                  Das ist ungefähr der Weg:

                  • neues DOM erzeugen
                  • Datei einlesen
                  • X-Tree-Darstellung erzeugen und anzeigen lassen (das ist die praktischste und kompakteste Übersicht)

                  folgendes eventuell mehrfach wiederholen:

                  • in der X-Tree-Darstellung die Nodes ermitteln, die man haben möchte
                  • aus dem Einsprungspunkt in X-Tree-Darstellung die Startnode ermitteln

                  extrahiertes HTML (oder die nackten Daten) sichern:

                  • neues Dokument erzeugen
                  • ab der Startnode die selectierten Nodes rekursiv importieren
                  • importierte Nodes in das neue DOM einhängen
                  • neues DOM als Datei exportieren

                  Ich schreibe das noch zusammen (und sollte eigentlich gleich einen kleinen Artikel für das Wiki daraus machen. Leider kenn ich mich damit noch nicht aus, wie das geht).

                  Spirituelle Grüße
                  Euer Robert
                  robert.r@online.de

                  --
                  Möge der wahre Forumsgeist ewig leben!
                  1. Hallo Robert,

                    danke, dass du dich mit dem Thema so intensiv beschäftigst.

                    Hier ist die Seite, in die ich die Texte der Fremdseite einsetzen möchte: Terminwünsche

                    Klicke mal auf einen Firmennamen in der ersten, linken Spalte (die anderen sind noch nicht fertig). Da wird eine Box eingeblendet, die den Text zeigen soll.

                    Ich stelle mir vor, den Text mit ajax zu holen. Das Programm soll ihn dann finden und zurückmelden.

                    Meine momentane Idee (Beispiel ADAC):

                    Ich lese die Seite als String ein und springe auf <div class="cb-head">. Von da an durchhangeln und geöffnete / geschlossene divs zählen.

                    Aber wenn man diesen Ast des "Baums" direkt greifen könnte, wäre natürlich toll.

                    Linuchs

                    1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

                      Klicke mal auf einen Firmennamen in der ersten, linken Spalte (die anderen sind noch nicht fertig). Da wird eine Box eingeblendet, die den Text zeigen soll.

                      Da kommt beim Klicken nur eine leere Seite
                      Aber es erscheint beim Hovern oben eine Information mit Bild usw.

                      Ich stelle mir vor, den Text mit ajax zu holen. Das Programm soll ihn dann finden und zurückmelden.

                      Wieso Ajax? Wäre es nicht besser, die Texte regelmäßig abzuholen und zu speichern, so wie Bots das auch machen? Es wird doch öfter ein PageView angefordert, als eine Änderung stattfindet.

                      Meine momentane Idee (Beispiel ADAC):

                      Ich lese die Seite als String ein und springe auf <div class="cb-head">. Von da an durchhangeln und geöffnete / geschlossene divs zählen.

                      Das Problem ist nur, wenn sich in der Struktur etwas ändert. Das ist auch noch mein Problem. Wenn jemand eine Hierarchieebene einfügt oder wieder wegnimmt, soll der angeforderte Bereich/Datenblock ja trotzdem noch gefunden werden. Das DOMDocument kennt kein getNodeByAttributes() oder sowas. Das muss man sich erst bauen. Daran sitze ich.

                      Und ein getNodeByEnvironment(liste) wäre doch noch ganz nett. Wenn die Klamotten eine ID haben, ist es überhaupt kein Problem, aber diese dahingeschissenen Seiten sind nicht einfach auszulesen.

                      Aber wenn man diesen Ast des "Baums" direkt greifen könnte, wäre natürlich toll.

                      Man kann sich aus dem DOM ein ganzes Fragment holen, also Nodes mit Children rekursiv lesen. Das klappt auch schon prima. Die Methoden sind vorhanden. Man muss nur erst die Startnode sicher finden.

                      Was würden Dir denn noch für sinnvolle Methoden zum sichren Auffinden der Startnode(s) einfallen? Wie gesagt, ich gehe davon aus, dass die auszuwertenden Seiten dynamisch generiert werden und daher nicht immer alle Elemente vorhanden sein müssen.

                      Spirituelle Grüße
                      Euer Robert
                      robert.r@online.de

                      --
                      Möge der wahre Forumsgeist ewig leben!
                      1. Was würden Dir denn noch für sinnvolle Methoden zum sichren Auffinden der Startnode(s) einfallen?

                        Den Firmennamen kenne ich ja. Wenn der auf der Original-Seite das zweite mal vorkommt.

                        Beispiel: "Eni"

                        Habe zum Testen mal Pfeile als Link auf die Original-Seiten eingeführt, um diese Aussae prüfen zu können.

                        Linuchs

                        1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

                          Was würden Dir denn noch für sinnvolle Methoden zum sichren Auffinden der Startnode(s) einfallen?

                          so langsam kommt Salz an die Suppe...

                          Nachdem ich zuerst den Weg von hinten durch die Brust ins Auge genommen habe, klappt's jetzt auch so langsam direkt im Objekt-Modell ohne die vorherige Umwandlung in ein Array oder eine XPath-Liste. Die sind aber beide für die Vissualisierung ganz hilfreich.

                          Ich brauch also noch ein paar Stündchen, bis brauchbare Methoden draus geworden sind. Die sollen dann später ja nicht einschlafen bei der Suche nach bestimmten Elementen und dem Scannen der Nachbarschaft.

                          Spirituelle Grüße
                          Euer Robert
                          robert.r@online.de

                          --
                          Möge der wahre Forumsgeist ewig leben!
                          1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

                            damit ich schon mal eine Teillösung abliefern kann:

                            Einen Bereich (eine Node samt Subnodes) aus einem HTML-Dokument auszuschneiden, geht absolut einfach, wenn man diese eine ID hat:

                            ## file_get_contents() nur für den Test, ich bevorzuge sonst explizite
                            ## File-Dialoge mit Fehlerbehandlung und Sperren
                            $text = file_get_contents('standard.html');  
                            
                            $dom = new DOMDocument('1.0', 'utf-8');
                            $dom->formatOutput = TRUE;
                            $dom->validateOnParse = TRUE;
                            $dom->normalizeDocument();
                            $dom->preserveWhiteSpace = true;
                            
                            $dom->loadHTML($text);
                            
                            $table = $dom->getElementById('t001');
                            
                            ## "to-string"-Methode für HTML
                            $out = $dom->saveHTML($table);  
                            
                            echo "<pre>\r\n";
                            echo htmlspecialchars($out);
                            echo "</pre>\r\n";
                            
                            

                            Die Schwierigkeit liegt einzig und alleine darin, die richtige Node zu finden. Da fehlen mir einfach noch die Ideen, wie man die besser eingrenzen kann:

                            • direkte Nachbarn (Parent, Siblings, Children)
                            • Attribute (id, classes, ...)
                            • Textinhalte
                            • ???

                            Freue mich über Anregungen.

                            Spirituelle Grüße
                            Euer Robert
                            robert.r@online.de

                            --
                            Möge der wahre Forumsgeist ewig leben!
                    2. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

                      Meine momentane Idee (Beispiel ADAC):

                      Ich lese die Seite als String ein und springe auf <div class="cb-head">. Von da an durchhangeln und geöffnete / geschlossene divs zählen.

                      Aber wenn man diesen Ast des "Baums" direkt greifen könnte, wäre natürlich toll.

                      Ich habe das, was ich vorhin für die EUROPA SERVICE Autovermietung gebaut hatte mal auf ADAC angewendet und man bekommt ohne weiteres die Daten:

                      <div class="content_box big">
                      	<div class="cb-head">
                      		<h4>ADAC e.V.</h4>
                      	</div>
                      	
                      	<div class="cb-content clearfix">
                      		<div>Pannenhilfe und Fahrsicherheit z&auml;hlen zu den Kernkompetenzen des ADAC. 
                      			Profitieren Sie auch als Gesch&auml;ftspartner f&uuml;r Ihre Flotte von diesen 
                      			innovativen Dienstleistungen. Bei Panne oder Unfall in den besten H&auml;nden! 
                      			Die <b>ADAC Flotten Assistance</b> bietet schnelle und professionelle Hilfe in 
                      			ADAC Qualit&auml;t. Gerade in Notsituationen k&ouml;nnen Sie Ihren Fuhrparkkunden 
                      			rund um die Uhr ein Paket an Mobilit&auml;tsleistungen anbieten; stets zu 
                      			kosteng&uuml;nstigen Pauschalen ohne Vorauszahlung.<br><br>Mit der 
                      			Teilnahme am ADAC Fahrsicherheitstraining erh&ouml;hen Sie die Fahrsicherheit 
                      			und tragen zur Reduzierung der Schadensquote bei.&nbsp; Treibstoffkosten sparen 
                      			und defensives Fahren erlernen Sie im ADAC Sprit-Spar- und Eco-Training. 
                      			Auch der Spa&szlig; kommt nicht zu kurz f&uuml;r Fun &amp; Action Begeisterte 
                      			bieten wir au&szlig;ergew&ouml;hnliche Fahrerlebnisse an.<br><br>Wir freuen 
                      			uns &uuml;ber Ihren Besuch am ADAC Stand.
                      			<br>
                      		</div>
                      	</div>
                      </div>
                      

                      Die Umbrüche im Text habe ich eingesetzt und die Formatierung (Einrückungen) nachgebessert, um zu kontrollieren, ob auch alle Elemente vollständig vorhanden sind bzw. ergänzt werden (das passiert automatisch).

                      Man kann ohne weiteres bei <div class="content_box big"> aufsetzen.

                      Wenn Du erst bei <div class="cb-head"> anfängst, erhältst Du natürlich nur den Block

                      	<div class="cb-head">
                      		<h4>ADAC e.V.</h4>
                      	</div>
                      

                      Der nächste wäre ja ein Sibling und kein Child. Da müsstest Du dann in dem zu bauenden Tool in der X-Path-Übersicht zwei Startpunkte markieren.

                      Ich bastel heute noch an einem "getElementsByAttribs( array of attribs )"
                      Das ergibt dann eine DOMNodeList. Je mehr Attribs vorgabe sind, desto genauer werden die Nodes gefiltert.

                      Dann kann der Autor der Seite ruhig kleinigkeiten ändern, solange er die Elemente mit den Attributen drin lässt.

                      Spirituelle Grüße
                      Euer Robert
                      robert.r@online.de

                      --
                      Möge der wahre Forumsgeist ewig leben!
                      1. Hallo Robert,

                        inzwischen habe ich alle Aussteller zum Anklicken erfasst.

                        Du hattest geschrieben, dass du beim KLick auf einen Firmennamen nur eine leere Info-Box (oder eine leere neue Seite?) bekommst. Kann ich mit Opera nicht nachvollziehen. Ist das noch so?

                        Ich bastel heute noch an einem "getElementsByAttribs( array of attribs )"
                        Das ergibt dann eine DOMNodeList. Je mehr Attribs vorgabe sind, desto genauer werden die Nodes gefiltert.

                        Da bin ich gespannt und freue mich schon drauf.

                        Gruß, Linuchs

                        1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

                          inzwischen habe ich alle Aussteller zum Anklicken erfasst.

                          Du hattest geschrieben, dass du beim KLick auf einen Firmennamen nur eine leere Info-Box (oder eine leere neue Seite?) bekommst. Kann ich mit Opera nicht nachvollziehen. Ist das noch so?

                          Ja, es kommt nur eine "about:blank"-Seite. Dafür bleiben die angeklickten Firmennamen nun grün hinterlegt.

                          Ich habe extra auch ABP ausgeschaltet und eben versucht, mir die HTTP-Header anzusehen. Wenn man da mit der Maus über den Bildschirm fährt, flitzen die ja nur so durch. Ich nehme an, von den Ajax-Requests? Da hat man praktisch keine Chance, den richtigen Header vom Klick noch zu sehen... So groß kann ich den Puffer gar nicht ein einstellen.

                          Ich würde mir das mit Ajax nochmal überlegen...

                          Ich bastel heute noch an einem "getElementsByAttribs( array of attribs )"
                          Das ergibt dann eine DOMNodeList. Je mehr Attribs vorgabe sind, desto genauer werden die Nodes gefiltert.

                          Da bin ich gespannt und freue mich schon drauf.

                          Du kannst vorab die Basteldateien haben, wenn ich die eine vorhandene nachher in mehrere themenbezogene zerlegt habe. An welche Email möchtest Du sie haben? Ich möchte die Ideen noch nicht veröffentlichen, weil sie dann nur zerredet werden, bevor ich damit einigermaßen durch bin.

                          Irgendwie habe ich noch keinen Plan, wie ich die Klassen erweitern kann, ohne dass ich bei jedem Release wieder von vorne anfangen muss.

                          Spirituelle Grüße
                          Euer Robert
                          robert.r@online.de

                          --
                          Möge der wahre Forumsgeist ewig leben!
                          1. Halo Robert,

                            Ja, es kommt nur eine "about:blank"-Seite. Dafür bleiben die angeklickten Firmennamen nun grün hinterlegt.

                            Oh ja, dieses " target="_blank"" habe ich übersehen, wollte ursprünglich die Info auf einer neuen Seite zeigen, nun aber in einem div:

                            <li onClick="switchMarkierung(this)"><input id="a004" type="checkbox" name="a004" value=1> <a href="javascript:zeigBeschreibung( 'a004', 'http://fuhrparkforum.de/files/smthumbnaildata/ausstellerlogo/7/0/7/4/8/ADAC.png','ADAC','Mobilität, Sonstige Fuhrparkdienstleistungen',4)"onmouseover="zeigFirma('http://fuhrparkforum.de/files/smthumbnaildata/ausstellerlogo/7/0/7/4/8/ADAC.png', 'ADAC', 'Mobilität, Sonstige Fuhrparkdienstleistungen')" onmouseout="nichtFirma()" title="004" target="_blank">ADAC</a> <a href="http://fuhrparkforum.de/adac/386/1259/587">➚</a></li>
                            

                            javascript:zeigBeschreibung füllt (zumindst bei Opera) einen Container und setzt ihn auf display:block. target="_blank" wird von Opera vollkommen ignoriert, öffnet im selben Fenster.

                            Ich nehme an, von den Ajax-Requests?

                            Nein. z.Z. kein ajax aktiv.

                            Du kannst vorab die Basteldateien haben, wenn ich die eine vorhandene nachher in mehrere themenbezogene zerlegt habe. An welche Email möchtest Du sie haben?

                            osmer.kh bei gmx.de bitte.

                            Linuchs

                            Möge der wahre Forumsgeist ewig leben!

                            Ich bin ewas traurig, bekam gestern die Meldung, dass eine kleine Hündin, die ich mehrfach betreut habe, wegen Krebs eingeschläfert werden musste.

                            Warum soll ein Forumsgeist ewig leben?

                  2. Hallo robertroth,

                    Ich schreibe das noch zusammen (und sollte eigentlich gleich einen kleinen Artikel für das Wiki daraus machen. Leider kenn ich mich damit noch nicht aus, wie das geht).

                    Das find ich ja mal gut :)

                    Die Wiki-Syntax ist noch wieder eine ganz andere als Kramdown :O

                    Aber ich kann auch ganz normales HTML oder gar ein Worddokument für dich umwandeln.

                    Bis demnächst
                    Matthias

                    --
                    Signaturen sind bloed (Steel) und Markdown ist mächtig.
        2. Tach!

          Experimetiere mal mit einem div, in den du iframe einbettest und probiere, den iframe mit margin-top -500px (nur ein Beispiel) so zu schieben, dass du nur den gewünschten Teil der fremden Seite siehst.

          Die eingebettete Seite wird relativ zum Iframe angezeigt und verschiebt sich mit. Den Inhalt des Iframes zu manipulieren verhindert die Same Origin Policy.

          dedlfix.