picknikker: Auslesen und Anzeige bestimmter HTML-Codesequenzen

Hallo zusammen,

ich suche dringend nach einer Möglichkeit eine bestimmte Codesequenz von einer meiner Websites in einem beliebigen anderen Browserfenster anzeigen zu lassen.
Das Script müsste selbst den Inhalt zwischen

<div class="wichtig">

<div class="weitere">...</div>
<div class="nochmehr">...</div>
<div class="usw">...</div>

</div><!--ENDE WICHTIG-->

erkennen und eben nur diesen Teil, der sich dazwischen befindet (der kann varieeren) übergeben. Ob nun mit I-Frame oder irgendwie anders.

Auf dem Server wo die auszulesende Sequenz sich befindet kann ich kein PHP, sondern nur Javascript einsetzen, auf der Site wo die Ausgabe stattfinden soll bin ich freier.

Hat jemand eine gute Idee?

Danke im Voraus

  1. Grüße,
    könntest du spezifischer werden? welcher teilschritt klappt erstmal nicht?
    MFG
    bleicher

    --
    __________________________-

    FirefoxMyth
    1. Grüße,
      könntest du spezifischer werden? welcher teilschritt klappt erstmal nicht?
      MFG
      bleicher

      Sorry, hab erstmal außer dem grundsätzlichen Ansatz nichts.

  2. @@picknikker:

    nuqneH

    Das Script müsste selbst den Inhalt zwischen

    <div class="wichtig">

    <div class="weitere">...</div>
    <div class="nochmehr">...</div>
    <div class="usw">...</div>

    </div><!--ENDE WICHTIG-->

    erkennen und eben nur diesen Teil, der sich dazwischen befindet

    „Dazwischen“ heißt ohne Start-Tag <div class="wichtig"> und ohne zugehöriges End-Tag </div>? Das dazwischen bekommst du mit document.getElementsByClassName('wichtig')[0].innerHTML.

    Wenn du den Inhalt aus mehreren Elementen der Klasse "wichtig" auslesen willst, musst du eine Schleife bauen.

    getElementsByClassName() funktioniert nicht in IE < 9.

    Wenn jQuery zur Verfügung steht, kann man das auch einfach mit $('.wichtig').html() haben.

    Auf dem Server wo die auszulesende Sequenz sich befindet kann ich kein PHP, sondern nur Javascript einsetzen

    JavaScript auf dem Server? Node.js? Bist du sicher?

    Qapla'

    --
    Wer möchte nicht lieber durch Glück dümmer als durch Schaden klüger werden? (Salvador Dalí)
    1. @@picknikker:

      nuqneH

      Das Script müsste selbst den Inhalt zwischen

      <div class="wichtig">

      <div class="weitere">...</div>
      <div class="nochmehr">...</div>
      <div class="usw">...</div>

      </div><!--ENDE WICHTIG-->

      erkennen und eben nur diesen Teil, der sich dazwischen befindet

      „Dazwischen“ heißt ohne Start-Tag <div class="wichtig"> und ohne zugehöriges End-Tag </div>? Das dazwischen bekommst du mit document.getElementsByClassName('wichtig')[0].innerHTML.

      Wenn du den Inhalt aus mehreren Elementen der Klasse "wichtig" auslesen willst, musst du eine Schleife bauen.

      getElementsByClassName() funktioniert nicht in IE < 9.

      Wenn jQuery zur Verfügung steht, kann man das auch einfach mit $('.wichtig').html() haben.

      Auf dem Server wo die auszulesende Sequenz sich befindet kann ich kein PHP, sondern nur Javascript einsetzen

      JavaScript auf dem Server? Node.js? Bist du sicher?

      Qapla'

      Hi und Danke schon mal. Das mit dem  "getElementsByClassName" hatte ich schon mal irgendwo aufgeschnappt gehabt. Kriege aber wegen chronischer Javascript-Legastenie die Komponenten nicht aneinander.
      Ob das <div class="wichtig"> samt schließendem Tag mit ausgelesen wird oder nicht ist im Prinzip egal. Es lässt sich ja anschließend alles mit CSS prima bearbeiten. Da traue ich mir fast alles zu (:-)).

      Gut, auf dem Server selbst kann ich nur in einigen Bereichen eben eigenen Code einbinden, aber eben nicht PHP, da bei STRATO gehosteter Shop.

      Aber wenn ich Deinen Ansatz richtig verstanden habe, brauche ich im Shop auch nichts verändern, sondern auf der Site, die die Sequenz anzeigen soll, eben mit der getElementbyName arbeiten. Wie sage ich dem Script auf welcher Website es suchen soll? Es handelt sich immer um solche Produktansichten:

      http://shop.strato.de/epages/63450760.preview/de_DE/?ObjectPath=/Shops/63450760/Products/999989

      .und das Element, auf da es ankommt ist <div id="ProductSlideshow">...</div>

      1. Om nah hoo pez nyeetz, picknikker!

        Es ist nicht notwendig, das komplette Antwortposting zu zitieren.

        Aber wenn ich Deinen Ansatz richtig verstanden habe, brauche ich im Shop auch nichts verändern, sondern auf der Site, die die Sequenz anzeigen soll, eben mit der getElementbyName arbeiten. Wie sage ich dem Script auf welcher Website es suchen soll? Es handelt sich immer um solche Produktansichten:

        http://shop.strato.de/epages/63450760.preview/de_DE/?ObjectPath=/Shops/63450760/Products/999989

        Im einfachsten Fall wirkt JavaScript immmer in dem HTML-Dokument in dem es steht. Mit JavaScript fremde (möglicherweise auch eigene, aber von anderer Domain) Inhalte einzubinden könnte wegen der SOP schwierig werden.

        Matthias

        --
        1/z ist kein Blatt Papier.

        1. Im einfachsten Fall wirkt JavaScript immmer in dem HTML-Dokument in dem es steht. Mit JavaScript fremde (möglicherweise auch eigene, aber von anderer Domain) Inhalte einzubinden könnte wegen der SOP schwierig werden.

          SOP steht hier für irgendeinen Schutz, nehme ich mal an.
          Es geht hier leider nicht anders. Ich muss irgendwie eine Möglichkeit schaffen, diese Sequenz auf einer anderen Website anzeigen zu lassen. Iframe scheidet aus, da dort doch nur die gesamte Seite angezeigt wird, oder bin ich da auf dem Kautschukholz-Weg?

          1. Hallo,

            SOP steht hier für irgendeinen Schutz, nehme ich mal an.

            "Same Origin Policy".
            Es bedeutet ganz einfach, dass Javascript keinen Zugriff auf Daten hat, die von einer anderen Domain stammen als das Dokument, in dem das Script steht (von wenigen Ausnahmen abgesehen).

            Es geht hier leider nicht anders.

            So geht es aber auch nicht.

            Ich muss irgendwie eine Möglichkeit schaffen, diese Sequenz auf einer anderen Website anzeigen zu lassen. Iframe scheidet aus, da dort doch nur die gesamte Seite angezeigt wird, oder bin ich da auf dem Kautschukholz-Weg?

            Dann wirst du das vermutlich serverseitig lösen müssen - also das gewünschte Dokument komplett aus dem STRATO-Webshop abrufen, dann den gewünschten Teil isolieren, und das an den Client senden. Mit PHP wäre das machbar.

            So long,
             Martin

            --
            Ein guter Lehrer muss seinen Schülern beibringen können,
            eine Frage so zu stellen, dass auch der Lehrer lernen muss,
            um die Frage beantworten zu können.
              (Hesiod, griech. Philosoph, um 700 v.Chr.)
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
            1. Danke Martin, aber PHP scheidet nun mal definitiv aus, leider.
              Zerbreche mir nun schon den ganzen Tag den Kopf ...

              Könnte ein auf der Shopseite eingebundenes Javascript die Daten sammeln und sie z.B. in ein Verzeichnis der anderen Domain (von der wiederrum der Abruf der Daten zwecks Anzeige erfolgt) in eine Textdatei schreiben? Aber dann müsste ich dem Script die Zugangsdaten mitgeben, oder? Die wären dann für jeden einsehbar, der die Website aufruft, richtig?

              1. Hallo,

                Danke Martin, aber PHP scheidet nun mal definitiv aus, leider.

                wieso denn das jetzt? Im Startposting hast du gesagt, nur auf der Shop-Site selbst wärst du so eingeschränkt, und auf der Site, wo die Ausgabe stattfinden soll, wärst du freier.
                Was denn nun?

                Ciao,
                 Martin

                --
                Früher habe ich mich vor der Arbeit gedrückt. Heute könnte ich stundenlang zusehen.
                Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
                1. Hallo,

                  Danke Martin, aber PHP scheidet nun mal definitiv aus, leider.

                  wieso denn das jetzt? Im Startposting hast du gesagt, nur auf der Shop-Site selbst wärst du so eingeschränkt, und auf der Site, wo die Ausgabe stattfinden soll, wärst du freier.
                  Was denn nun?

                  Ciao,
                  Martin

                  achso, sorry. Missverständnis. Es stimmt, auf der Ausgabeseite bin ich definitiv freier. Kann PHP denn Inhalte "fremder" Seiten auslesen? Gib mir doch mal bitte ein Stichwort. Dank sehr

                  1. Tach!

                    Kann PHP denn Inhalte "fremder" Seiten auslesen?

                    Klar. Am einfachsten mit file_get_contents('http://example.com/foo/bar');

                    dedlfix.

                    1. Tach!

                      Kann PHP denn Inhalte "fremder" Seiten auslesen?

                      Klar. Am einfachsten mit file_get_contents('http://example.com/foo/bar');

                      dedlfix.

                      Super, Danke. Ich denke damit kann ich arbeiten..

                    2. Tach!

                      Kann PHP denn Inhalte "fremder" Seiten auslesen?

                      Klar. Am einfachsten mit file_get_contents('http://example.com/foo/bar');

                      dedlfix.

                      Ich noch mal. Habe das so hinbekommen, wollte ab nun einen Teil der URL, die Abgerufen wird mit GET übergeben. Scheitere leider und weiß nicht so recht die richtige Lösung:

                        
                      <?php  
                      $produkt = $_GET["produkt"];  
                      $sebworld = file_get_contents('http://shop.strato.de/epages/63450760.preview/de_DE/?ObjectPath=/Shops/63450760/Products/<?php echo $produkt; ?>');  
                      ?>  
                        
                      <?php  
                      echo "$sebworld";  
                      ?>
                      

                      Es geht um die Produktnummer im letzten Teil der URL. Wie schreibt man das richtig hin. Kann mir da jemand kurz helfen bitte? Habe schon ganz viele Varianten probiert. Leider ohne Erfolg.

                      Vielen Dank

                      1. Tach!

                        $produkt = $_GET["produkt"];

                        Du musst das nicht kopieren. Ein Array-Element ist so gut wie jede "einfache" Variable auch.

                        $sebworld = file_get_contents('http://shop.strato.de/epages/63450760.preview/de_DE/?ObjectPath=/Shops/63450760/Products/<?php echo $produkt; ?>');
                        ?>

                        Du bist bereits im PHP-Block, also musst du ihn nicht erneut öffnen. Noch dazu geht das nicht in einem String, denn dann ist das <?... nur ein paar weitere Zeichen für die Zeichenkette. Du möchtest stattdessen den String beenden und die Variable mit dem String verknüpfen. Das allerdings nicht einfach so, denn du fügst Daten (im speziellen Fall eine Nutzereingabe) in eine URL ein, also musst du den URL-Kontext beachten. Alles zusammen sieht das dann so aus:

                        $sebworld = file_get_contents('http://shop.strato.de/epages/63450760.preview/de_DE/?ObjectPath=/Shops/63450760/Products/' . urlencode($_GET["produkt"]));

                        echo "$sebworld";

                        Variablen in Anführungszeichen einzurahmen, auf dass es einen String gibt, den PHP erst noch nach Variablen parsen muss ist unnötig aufwendig und sinnlos. echo $sebworld; ist ausreichend, um den Variableninhalt auszugeben. Allerdings musst du auch hier wieder den Kontext beachten. Du erhältst ein vermutlich vollständiges HTML-Dokument, was nun in $sebworld liegt. Wenn du das einfach so ausgibst, dann sollte da nicht bereits anderes HTML stehen. Das mixt sich sonst zu einem völlig ungültigen Ergebnis. Wenn das nur eine Kontrollausgabe ist, dann nimm htmlspecialchars(). Ansonsten beachte den Ausgabekontext angemessen.

                        dedlfix.

                        1. @@dedlfix:

                          nuqneH

                          $produkt = $_GET["produkt"];

                          Du musst das nicht kopieren. Ein Array-Element ist so gut wie jede "einfache" Variable auch.

                          Es ist sogar besser. $_GET["produkt"] sieht man an, dass man’s vor einer Ausgabe mit htmlspecialchars() behandeln muss; $produkt sieht man’s nicht an …

                          $sebworld = file_get_contents('http://shop.strato.de/epages/63450760.preview/de_DE/?ObjectPath=/Shops/63450760/Products/<?php echo $produkt; ?>');

                          … und dann passiert sowas! Kapitaler Fehler!

                          $sebworld = file_get_contents('http://shop.strato.de/epages/63450760.preview/de_DE/?ObjectPath=/Shops/63450760/Products/' . urlencode($_GET["produkt"]));

                          urlencode() reicht aus, oder?

                          Qapla'

                          --
                          Wer möchte nicht lieber durch Glück dümmer als durch Schaden klüger werden? (Salvador Dalí)
                          1. Tach!

                            Es ist sogar besser. $_GET["produkt"] sieht man an, dass man’s vor einer Ausgabe mit htmlspecialchars() behandeln muss; $produkt sieht man’s nicht an …

                            Man muss es den Variablen nicht ansehen. Es ist egal woher ein Inhalt kommt, er muss immer dem Ausgabekontext entsprechend behandelt werden. Sich darauf einzustellen, dass nur $_GET/$_POST gefährlich ist, ist gefährlich.

                            $sebworld = file_get_contents('http://shop.strato.de/epages/63450760.preview/de_DE/?ObjectPath=/Shops/63450760/Products/' . urlencode($_GET["produkt"]));

                            urlencode() reicht aus, oder?

                            Ja, denn es soll ja nur eine URL erzeugt werden, die zum Datenabfragen benutzt wird. Es findet kein weiterer Kontextwechsel damit statt. Und urlencode() muss für den Querystring-Teil ausreichen. Alternativ kann man auch (üblicherweise gefahrlos) rawurlencode() nehmen, dann wird ein Leerzeichen zu %20 statt zu +.

                            dedlfix.

                  2. @@picknikker:

                    nuqneH

                    Kann PHP denn Inhalte "fremder" Seiten auslesen?

                    Da wäre noch eine andere Frage zu klären: DARFST du denn Inhalte fremder Seiten auslesen, weiterverarbeiten und auf deiner Seite darstellen?

                    Qapla'

                    --
                    Wer möchte nicht lieber durch Glück dümmer als durch Schaden klüger werden? (Salvador Dalí)