Kein Rückgabewert bei Domain-Angabe
Horst
- javascript
0 Der Martin
0 Horst0 Antipitch0 Der Martin
0 Antipitch0 Der Martin
0 Antipitch0 Der Martin
0 Antipitch
Hallo,
Ich habe folgendes Problem:
ich will mit
frames['iframe'].document.getElementById('body').offsetHeight
die Höhe der zu ladenden Seite bestimmen,
das klappt auch wunderbar bei relativen Bezügen.
sobald ich im iframe aber eine Seite über "http://meinedomain.de/..."
lade, bekomme ich keinen Rückgabewert - kann man da irgendwas machen?
Hintergrund des ganzen ist, dass ich einen Top-Frame benutze für eine Menü-Leiste. Der Content liegt in einem iframe.
Ich "muss" das so realisieren, bzw. fällt mir im Moment keine andere Lösung ein, da ein Teil meines Content mir von einem Drittanbieter zur Verfügung gestellt wird, und ich zwar die Seiten in meine Page einbinden kann/darf/soll - aber keine Möglichkeit habe, an der Grundstruktur, sprich Menü-Leiste, Java/PHP-Code oder sonst was an diesen seiten zu ändern.
An den meisten Seiten auf meinem eigenen Server lässt sich die sache also ohne weiteres lösen. Es würde mir auch schon reichen, wenn ich über eine if-else funktion rausbekommen könnte, ob es geht oder nicht, dann würde ich halt eine feste Frame-Größe benutzen. Generell will ich das eigentlich nicht, da die Seiten schon sehr unterschiedlich groß sind und ich dann bei vielen Seiten ewig viel platz unten hätte. Natürlich könnte ich die Seiten des Drittanbieters einfach "normal" verlinken, oder in einem neuen Fenster anzeigen lassen - es sieht aber einfach besser aus, wenn das alles zusammen ist, zumal es auch einfacher zu bedienen ist, wenn das menü einheitlich ist und bleibt wo es ist.
Gibt es eine Lösung für mein Problem?
Gruß,
Horst
Hallo Horst,
ich will mit
frames['iframe'].document.getElementById('body').offsetHeight
die Höhe der zu ladenden Seite bestimmen,
sobald ich im iframe aber eine Seite über "http://meinedomain.de/..."
lade, bekomme ich keinen Rückgabewert - kann man da irgendwas machen?
nein, nicht wenn die im iframe geladene Seite von einer anderen Domain stammt.
Javascript darf grundsätzlich nur auf Dokumente zugreifen, die von derselben Domain stammen wie das Script selbst ("Same Origin Policy"). Das ist ein Sicherheitsfeature, um zu verhindern, dass beliebige Seiten durch ein verstecktes Javascript ausspioniert oder gesteuert werden.
Gibt es eine Lösung für mein Problem?
Eventuell ja. Du könntest die Fremdinhalte gleich serverseitig, z.B. mit PHP in deine Seite einbinden - dann könnte auch das lästige iframe entfallen und die ganze Größenanpassung wäre unnötig, weil sie automatisch geht.
So long,
Martin
Kann mir jemadn sagen, wie ich das serverseitig mache, bzw. einen Link dazu schicken?
Hallo Horst,
ich will mit
frames['iframe'].document.getElementById('body').offsetHeight
die Höhe der zu ladenden Seite bestimmen,
sobald ich im iframe aber eine Seite über "http://meinedomain.de/..."
lade, bekomme ich keinen Rückgabewert - kann man da irgendwas machen?nein, nicht wenn die im iframe geladene Seite von einer anderen Domain stammt.
Javascript darf grundsätzlich nur auf Dokumente zugreifen, die von derselben Domain stammen wie das Script selbst ("Same Origin Policy"). Das ist ein Sicherheitsfeature, um zu verhindern, dass beliebige Seiten durch ein verstecktes Javascript ausspioniert oder gesteuert werden.Gibt es eine Lösung für mein Problem?
Eventuell ja. Du könntest die Fremdinhalte gleich serverseitig, z.B. mit PHP in deine Seite einbinden - dann könnte auch das lästige iframe entfallen und die ganze Größenanpassung wäre unnötig, weil sie automatisch geht.
So long,
Martin
Hi Horst,
Kann mir jemadn sagen, wie ich das serverseitig mache, bzw. einen Link dazu schicken?
vorzugsweise mit einer include() Anweisung. Hier noch ein Tutorial.
Gruß
Antipitch
Hallo,
Kann mir jemadn sagen, wie ich das serverseitig mache, bzw. einen Link dazu schicken?
vorzugsweise mit einer include() Anweisung.
nein, in diesem Fall ganz sicher nicht.
Wenn der Fremdanbieter eine Ressource bereitstellt, die in einem iframe dargestellt werden kann, also ein vollständiges HTML-Dokument, würde man ungültigen HTML-Code erzeugen, wenn man das einfach in ein anderes Dokument einhängt.
Nur den Abschnitt zwischen <body> und </body> der Fremdressource darf man in diesem Fall weiterreichen.
So long,
Martin
Hi Martin,
stimmt schon, gibt bei dieser "Kooperation" ja keinen Zugriff bzw. Bereitstellung vernünftiger Art. Muss man die Seiten halt einlesen und per PHP bearbeiten (und daraus vielleicht erst die wirkliche inc erstellen. Und vielleicht unabhängig vom Aufruf der beinhaltenden eigenen Seite). Bleibt doch aber trotzdem Include als Grundprinzip oder hast du/ jemand anderes da eine andere Methode (außer Frames)?
Gruß
Antipitch
n'Abend!
stimmt schon, gibt bei dieser "Kooperation" ja keinen Zugriff bzw. Bereitstellung vernünftiger Art.
;-)
Bleibt doch aber trotzdem Include als Grundprinzip oder hast du/ jemand anderes da eine andere Methode (außer Frames)?
Ja, ich würde tatsächlich anders vorgehen.
Nämlich erst die fremde Ressource in einen String holen. Das kann je nach Konfiguration über file_get_contents() gehen, sonst etwas umständlicher mit fsockopen(), dann mit fwrite() und fread() selbst HTTP mit dem anderen Host sprechen.
Dann mit den Stringfunktionen von PHP erst nach <body ...> suchen, das sind zwei Aufrufe von strpos(), dann nach </body> (beide Ausdrücke dürfen ja nur einmal vorkommen), und mit substr() den Bereich dazwischen ausschneiden.
Schließlich den extrahierten Teilstring mit echo ausgeben.
So long,
Martin
Ja, ich würde tatsächlich anders vorgehen.
Nämlich erst die fremde Ressource in einen String holen. Das kann je nach Konfiguration über file_get_contents() gehen, sonst etwas umständlicher mit fsockopen(), dann mit fwrite() und fread() selbst HTTP mit dem anderen Host sprechen.
Das ist dann aber ungefähr mein (nachgereichter ;-) erster Teil, oder? Wobei: readfile würde bei PHP Standrdeinstellung auch gehen, nein?
Dann mit den Stringfunktionen von PHP erst nach <body ...> suchen, das sind zwei Aufrufe von strpos(), dann nach </body> (beide Ausdrücke dürfen ja nur einmal vorkommen), und mit substr() den Bereich dazwischen ausschneiden.
Hhmm, als einzelnen String ausgeben? Auch gute Idee. Dateipfade etc. aber evtl. auch noch ersetzen... Das sollte wohl spätestens bei Aufruf der eigenen Startseite initiiert werden. Oh oh, armer Horst, viel Arbeit :-)
Gruß
Antipitch
Hallo,
Nämlich erst die fremde Ressource in einen String holen. Das kann je nach Konfiguration über file_get_contents() gehen, sonst etwas umständlicher mit fsockopen(), dann mit fwrite() und fread() selbst HTTP mit dem anderen Host sprechen.
Das ist dann aber ungefähr mein (nachgereichter ;-) erster Teil, oder?
welcher?
Wobei: readfile würde bei PHP Standrdeinstellung auch gehen, nein?
Technisch ja, aber dann reichst du auch die komplette Ressource durch, einschließlich des hier unerwünschten html-Grundgerüsts.
[...] und mit substr() den Bereich dazwischen ausschneiden.
Hhmm, als einzelnen String ausgeben? Auch gute Idee. Dateipfade etc. aber evtl. auch noch ersetzen...
Ups. Guter Einwand. Das hatte ich noch übersehen, aber es stimmt - wenn man es richtig machen will, müsste man tatsächlich noch alle relativen Pfade in absolute Pfade auf der Ursprungsdomain umwandeln.
Oh oh, armer Horst, viel Arbeit :-)
Allerdings. Auweia ...
Schönen Abend noch,
Martin
Moin Martin,
Nämlich erst die fremde Ressource in einen String holen. Das kann je nach Konfiguration über file_get_contents() gehen, sonst etwas umständlicher mit fsockopen(), dann mit fwrite() und fread() selbst HTTP mit dem anderen Host sprechen.
Das ist dann aber ungefähr mein (nachgereichter ;-) erster Teil, oder?welcher?
Der hier:
Muss man die Seiten halt einlesen und per PHP bearbeiten
;-)
Wobei: readfile würde bei PHP Standrdeinstellung auch gehen, nein?
Technisch ja, aber dann reichst du auch die komplette Ressource durch, einschließlich des hier unerwünschten html-Grundgerüsts.
Dazu hätte ich noch eine kleine Verständnisfrage: file_get_contents() ist die bessere Lösung, weil direkt mit dem string gearbeitet werden kann, hab ich kapiert. Aber eingelesen wird doch auch erstmal alles von <Doctype... bis </html>? Oder transportiert mir readfile() noch etwas, von dem ich gerade nichts ahne?
Gruß
Antipitch
Hallöchen,
Dazu hätte ich noch eine kleine Verständnisfrage: file_get_contents() ist die bessere Lösung, weil direkt mit dem string gearbeitet werden kann, hab ich kapiert. Aber eingelesen wird doch auch erstmal alles von <Doctype... bis </html>?
das ist soweit richtig. Der wesentliche Unterschied ist, dass du mit file_get_contents() die Daten in einem String bekommst und bearbeiten kannst. Dagegen liest readfile() die Daten nur und gibt sie direkt ohne jede Änderung an den Browser aus, das Script kriegt also ger nicht mit, was es da eigentlich ausgibt. Also könnte man readfile($file) in etwa übersetzen als echo file_get_contents($file), ohne dass man die übertragenen Daten auf dem Weg anschaut.
Ciao,
Martin
Allet klar,
dank dir!
Gruß
Antipitch
Vielen Vielen Dank ihr beiden...
Ohh mann, das klingt tatsächlich nach Arbeit -
ich schau mal was ich umsetzen kann...
Allet klar,
dank dir!Gruß
Antipitch