Thomas E.: Tabelleninhalt auslesen

Hallo

Zuerst mal vielen Dank für Eure geniale Doku.

Im Moment stehe ich vor einem kleinen Problem bei dem ich einfach nicht weiterkomme. Bei uns gibt es einen zentralen Server im Intranet der auf Anfrage die Kundendaten als Tabelle in einer HTML Datei zurückgibt. Das funktioniert auch tadellos im Internet Explorer. Man gibt die entsprechende URL ein und schon erscheint die Tabelle mit allen Daten.

Um mir das ziemlich zeitraubende Copy & Paste beim Anschreiben der Kunden am Nerv geht habe ich mir gedacht ich schreibe mir lokal auf meinem PC eine HTML Datei die mir per Javascript die Kundendaten holt und die Daten formatiert in ein Textfeld schreibt. Mein Problem ist, dass ich einfach nicht auf den Inhalt der Tabellentags zugreifen kann/darf.

So sieht die (vereinfachte) Kundendatei (kunde.htm) aus:

<html>
<head>
</head>

<body>
<table>
<tr>
   <td>Cust.Name: </td>
   <td>Meier Bau</td>
</tr>
<tr>
   <td>Cust.ID: </td>
   <td>4711</td>
</tr>
</table>
</body>
</html>

und so sieht meine lokale Datei aus:

<html>
<head>
<script type="text/javascript">
<!--
var Fenster

function laden()
{
 Fenster = window.open("kunde.htm","test","width=300,height=100");
 window.setTimeout("start()",2000);

}

function start()
{
 alert(Fenster.document.getElementsByTagName("table")[0].firstChild.firstChild.childNodes(1).firstChild.data);
}
</script>
</head>

<body onLoad="javascript:laden()">
</body>
</html>

Solange beide Dateien bei mir lokal im selben Verzeichnis liegen gibts keine Probleme. Wenn ich beim window.open die URL auf den Server im Intranet ändere, dann werden zwar die richtigen Kundendaten im Popup angezeigt aber die Tabellendaten kann ich nicht auslesen.

Gibts irgendeinen Weg wie ich an die Kundendaten rankommen kann ?

Danke

Thomas

  1. Hallo Thomas,

    Solange beide Dateien bei mir lokal im selben Verzeichnis liegen gibts keine Probleme. Wenn ich beim window.open die URL auf den Server im Intranet ändere, dann werden zwar die richtigen Kundendaten im Popup angezeigt aber die Tabellendaten kann ich nicht auslesen.

    Was du vorhast, scheint wohl auch der "same origin policy" zu widersprechen. Vielleicht lässt sich da aber in einem Intranet konfigurativ was drehen. Da musst du aber andere fragen, keine Ahnung.

    Gruß Gernot

    1. Moin!

      Was du vorhast, scheint wohl auch der "same origin policy" zu widersprechen. Vielleicht lässt sich da aber in einem Intranet konfigurativ was drehen. Da musst du aber andere fragen, keine Ahnung.

      Nein, läßt sich nicht. Wenn man es könnte, könnte man es aushebeln und auf das Internet ausweiten.

      - Sven Rautenberg

      1. Hallo

        Danke für Eure Antworten. Mit den Rechten muss es was zu tun haben aber mir ist nicht klar wieso ich im Browser den Inhalt der Tabelle ansehen kann und das selbe über Javascript unterbunden wird. Ich verstehe ja, dass ich keinen schreibenden Zugriff auf die Tags bekomme aber wieso geht das lesen auch nicht. Genau der Tabelleninhalt wird ja auch vom Internet Explorer angezeigt.

        Parallel habe ich jetzt schon versucht die Datei in meiner HTML Seite mit einem <iframe> bzw. <object> einzubinden aber leider ohne Erfolg. Die Datei wird angezeigt aber ich kann nicht drauf zugreifen. Ich hatte auch schon die Idee den Text in dem <iframe> bzw. <object> zu öffnen und per Javascript zu markieren aber das geht nicht weil es für <iframe> bzw. <object> kein Markieren per Script gibt.

        Ein weiterer Ansatz war das Einbinden der HTML Seite als XML Dateninsel (<xml></xml>). Das geht mit XML Dateien gut aber bei HTML Dateien klappt das nicht :-(

        Gibts vielleicht irgendein ActiveXObject mit dem man HTML Files lesen kann ?

        Mit 'new ActiveXObject("microsoft.xmldom")' hats nicht geklappt. Sowas in der Richtung bräuchte ich für HTML Files.

        Thomas

        1. Moin!

          Ich verstehe ja, dass ich keinen schreibenden Zugriff auf die Tags bekomme aber wieso geht das lesen auch nicht.

          Damit du nicht das Passwort auslesen kannst, was vielleicht in der HTML-Seite der anderen Domain angezeigt wird.

          Genau der Tabelleninhalt wird ja auch vom Internet Explorer angezeigt.

          HTML-Seiten anzuzeigen ist harmlos. Wenn der Server die Seite rausrückt, hat man offensichtlich eine Berechtigung, sie anzusehen. Da HTML-Seiten außer auszusehen nichts weiter tun können (man kann keine beliebigen, auch beliebig bösen, Programme damit schreiben), ist das gleichzeitige Anzeigen zweier HTML-Seiten von unterschiedlichen Domains kein Problem.

          Aber Javascript kann unsichtbar arbeiten. Es kann unbemerkt Dinge tun, die der Besucher der Website nicht wünscht. Und man kann durch geschicktes Programmieren ein und dasselbe Programmergebnis auf unendlich viele verschiedene Arten erreichen - es gibt also keine sichere Methode, "böse" Skripte sicher zu identifizieren.

          Gibts vielleicht irgendein ActiveXObject mit dem man HTML Files lesen kann ?

          Es gibt XMLHttpRequest - das darf aber auch nicht cross-domain arbeiten.

          - Sven Rautenberg

          1. Hi

            Sicherheit ist ja gut aber ich will doch nur den Inhalt von Tags auslesen die sowieso auch im Fenster des IE angezeigt werden. Da sehe ich kein Sicherheitsrisiko aber daran hat Microsoft wahrscheinlich nicht gedacht.

            Danke

            Thomas

            1. Moin!

              Sicherheit ist ja gut aber ich will doch nur den Inhalt von Tags auslesen die sowieso auch im Fenster des IE angezeigt werden. Da sehe ich kein Sicherheitsrisiko aber daran hat Microsoft wahrscheinlich nicht gedacht.

              Woran soll der Browser erkennen, dass du ein ganz Lieber bist? Und wie soll verhindert werden, dass Dinge, die ganz Liebe tun dürfen, von den ganz Bösen nicht auch getan werden?

              Es gibt genau zwei Lösungen zu deinem Problem:
              1. Du schaffst die externe Tabelle auf deine Platte und öffnest dann das Frameset.
              2. Du schaffst das Frameset auf den Intranetserver und rufst es dort auf.

              Methode 1 steht in deiner Macht, für Methode 2 brauchst du mutmaßlich die Unterstützung des Intranet-Admin. Beide führen aber zum Erfolg.

              - Sven Rautenberg

            2. Sicherheit ist ja gut aber ich will doch nur den Inhalt von Tags auslesen die sowieso auch im Fenster des IE angezeigt werden. Da sehe ich kein Sicherheitsrisiko aber daran hat Microsoft wahrscheinlich nicht gedacht.

              Nein, du hast nicht an die Möglichkeiten gedacht die sich damit öffnen, genau wie die Browser Entwickler die diese Möglichkeit anfänglich eingebaut hatte.

              Da der Browser die ich ja nicht kennen kann ergibt sich folgende Situation.

              Seite von Server A lädt Seite von Server B.

              Angenommen du hast den Server A dann kannst du ein blindes Frameset erzeugen in dem die Seite von Server B anhezeigt wird. Bisher hierhin alles kein Problem.

              angenommen die Seite B ist dein Online Banking oder dein Online Postfach. jetzt könnte A z.b. ein JS schreiben, dass entweder das Formular verändert und einen submit Handler umbiegt, der die einlog Daten zusätzlich an ein Skript auf deinem server schickt z.b. mit dem Image() Objekt.

              Selbst wenn du nur lesenden Zugriff hättest, könntest du alle paar Sekunden den Inhalt der Seiten auf deinen Server übertragen.

              Und ich denke das auch mir nicht alle Möglichkeiten einfallen würden, da böse Buben in der Regel mehr Fantasie haben.

              Struppi.

        2. Hi!

          Danke für Eure Antworten. Mit den Rechten muss es was zu tun haben aber mir ist nicht klar wieso ich im Browser den Inhalt der Tabelle ansehen kann und das selbe über Javascript unterbunden wird. Ich verstehe ja, dass ich keinen schreibenden Zugriff auf die Tags bekomme aber wieso geht das lesen auch nicht. Genau der Tabelleninhalt wird ja auch vom Internet Explorer angezeigt.

          Folgende Situation:

          Ich frame das Online-Banking ein.

          Weitere Fragen?

          Gruß aus Iserlohn

          Martin