hi,
Seitenaufbau:
auf meiner aktuellen Seite gibt es eine iFrame, in diesem Inhalte lade. Ich verwende kein Request-Objekt, da dies eine alternative für Nutzer des Internet Explorers mit deaktiviertem ActiveX darstellen soll. Der Eventhandler "onload" zeigt dem Script, wann die Seite geladen ist und dieses liest dann die Inhalt in ein XMLHttpRequest-ähnliches Objekt. Die Seite, die ich im iFrame aufrufe, beinhaltet je nach Query eine andere, von Usern hoch-geladene Datei.
Problem:
Mir bereiten vor allem die Eigenschaften .responseXML
und .responseText
Kopfschmerzen, da die Seite, welche sich im iFrame öffnet, sowohl Text, HTML, XML, als auch Bilder (im Format, in dem sie der User hoch-geladen hat) beinhalten, etc. Also so ziemlich alles (*.exe zum Beispiel nicht). Wie soll ich diese beiden Eigenschaften im XMLHttpRequest-ähnlichen Objekt zur Verfügung stellen?
Lösungsversuche:
- Auslesen von
'<html>'+document.body.parentNode.innerHTML+'</html>'
als .responseText
und document.body.parentNode
als .responseXML
. Schön wäre es, aber die Browser verwandeln automatische alle Inhalte, die im iFrame laden ohne Rücksicht auf Verluste in SGML-Daten. Und das wirkt sich natürlich auch auf ".innerHTML" etc. aus.
(Beispiel:)
Aus der Plaintextdatei mit Inhalt "So ein Taxi gibt's nur in Bayern." wäre dann <html><head></head><body><pre>So ein Taxi gibt's nur in Baern.</pre></body></html>
geworden. Und <html><head></head><body><pre>...
würde mein Script ganz anders behandeln als einen Textstring wie "So ein Taxi gibt's nur in Bayern.".
Also brauche ich eine Möglichkeit, festzustellen, ob es sich um eine SGML-Datei (einfach document.body.parentNode.innerHTML
und document.body.parentNode
auslesen), ein Text (Bei <html><head></head><body><pre>So ein Taxi gibt's nur in Baern.</pre></body></html>
Inhalt des PRE-Elements auslesen) oder ein Bild handelt.
- Solche vom Browser generierte Dateien haben (je nach Browser) einen leeren Header bis keinen HEAD-Element. Allerdings gibt es auch so dumme Nutzer, die auf das TITLE-Element und die META-Elemente vergessen und somit auch einen leeren Header haben. Also ist das auch kein Kriterium, ob es sich um ein SGML-Dokument oder nicht handelt.
- Auslesen von der
location.href
des Frames, da ich scharf auf das Dateikürzel war. Doch leider Fehlanzeige: In allen Fällen handelt es sich dabei um eine *.cgi-Datei, welche den Dateityp nur als MIME-Type im Headerfeld Content-Type angibt. Also brauche ich einen Weg, den MIME-Type eines iFrames zu lesen, um somit auf die Art des Dokuments (SGML/Picture/TXT) schließen zu können.
- Auslesen von
document.contentType
, weil diese den MIME-Type beinhaltet. Perfekt, fast schon zu perfekt, um wahr zu sein. Doch leider wird diese Eigenschaft nur von Gecko unterstützt ("Non-Standard").
- Überprüfen vom boolischen Wert von
document.doctype
, weil solche nur bei echten SGML-Dokumenten existieren und der boolische Wert dann true
ist. Doch auch da: Manche Nutzer, sind zu blöd, einfach einen !DOCTYPE anzugeben. Und dann ist dieser auch hier false
.
- Und am Anfang der Datei einfach den MIME-Type mit-versenden. Nein, ich habe keine Möglichkeit, dass Script zu bearbeiten, da dieses jemand anderer "verwaltet" (:iron:) :-(
Zusammenfassung:
Ich brauche einfach eine Möglichkeit, festzustellen, ob es sich um eine SGML-Datei (einfach document.body.parentNode.innerHTML
und document.body.parentNode
auslesen), ein Text (Bei <html><head></head><body><pre>So ein Taxi gibt's nur in Baern.</pre></body></html>
Inhalt des PRE-Elements auslesen) oder ein Bild handelt.
Es ist ein sehr komplexes Problem; ich hoffe, ich konnte es trotzdem verständlich schildern. Mir ist eine nicht-weiterhelfende Antwort zu viel lieber als eine weiterhelfende zu wenig.
mfg Latzhose;