phpbar.de logo

Mailinglisten-Archive

[php] <Leicht OT>PHP Datei einbinden</OT>

[php] <Leicht OT>PHP Datei einbinden</OT>

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Die Apr 26 12:47:48 CEST 2005


Hallo Gerhard,

Gerhard Seidler [seitux.at] schrieb:
> Denke ich muss einmal den Hintergrund der Gschicht erklären.
> "Schnitze" gerade ein Gästebuch für einen Kunden.
> Also dachte ich mir, nimmts ein wenig eigene Zeit mit dazu, und
> stellst es der "deutschsprachichen Welt" zur Verfügung :-)
>
> Der Aufbau ist folgendermassen:
> Die Registrierungsseite ist unter:
> http://guestbook.seitux.at
> Wenn man sich registriert hat, bekommt man ein Mail mit der
> "Einbauerklärung".
> (Teste einfach einmal)
>
>> Und könntest Du einmal genau sagen, von welcher Farbe Du
>> sprichst, wo Du sie definiert hast und wo sie nicht zur
>> Anzeige kommt? Könnte es eventuell eine Farbe sein, die mit
>> diesem Javascript (-> tiny_mce.js) gesetzt wird? Vielleicht
>> wird das Javascript im IE nicht richtig ausgeführt?
>
> Es geht hier um die Hintergrundfarbe des Kunden.
> z.B.: Auf Deiner "main Seite" ist die bgcolor="navy" und der Text
> yellow, wenn Du nun das Gästebuch mittels <iframe> einbindest soll
> der HG des <iframe> navy und der Text yellow sein.
> Lustigerweise funktioniert dies mit dem Firefox (IE [nein], Opera
> [nein])

soooo... :-) Ich habe mir das jetzt noch einmal genauer angeschaut.

Was Du willst, nennt sich "Cross-Site Scripting". Und das geht auf jeden
Fall schon mal nicht, wenn die Seite, die Du über <iframe> oder besser und
zukunftssicher über <object> in Deine HTML-Seite lädst, nicht dieselbe
Domain hat.

Auch sind Deine Beobachtungen nicht ganz richtig.

Es stimmt, daß im Firefox die per <iframe> bzw. <object> geladene Seite
dieselbe Hintergrundfarbe zu haben scheint, wie die Seite, die sie lädt.
Es stimmt aber nicht, daß die CSS-Einstellungen der einbindenden Seite die
Formatierung der eingebundenen Seite in irgendeiner Weise beeinflussen.

Wie kommt es also dazu, daß der Hintergrund der eingebundenen Seite im
Firefox derselbe ist wie in der einbindenden Seite?

Der Grund ist einfach. Du mußt in drei Schichten denken.

Obere Schicht: Die eingebundene Seite und ihre Hintergrundfarbe.
Mittlere Schicht: Das <iframe>- bzw. <object>-Tag und seine Hintergrundfarbe.
Untere Schicht: Die einbindende Seite und ihre Hintergrundfarbe.

Aufgrund Deiner Programmierung, d.h. keine Hintergrundfarbe für das
<iframe>- bzw. <object>-Tag und für die eingebundene Seite gesetzt, geht
der Firefox-Browser hin und setzt für beide den in der CSS-Spezifikation
für das Attribut background-color festgelegten Initialwert "transparent",
so daß hier also die Hintergrundfarbe der untersten Schicht - also der
einbindenden Seite - bis in die oberste Ebene wirkt, weil die
darüberliegenden Ebenen eben keine Hintergrundfarbe haben und damit
durchsichtig sind.

Der Internet Explorer geht hier etwas anders vor. Er verwendet für das
<iframe>- bzw. <object>-Tag entgegen der W3C-Empfehlung als Initialwert
wohl Weiß. Daher kann die Hintergrundfarbe der einbindenden Seite
natürlich nicht durchscheinen.

U.U. weist Du der eingebundenen Seite aber auch mit dem Javascript
tiny_mce.js eine Hintergrundfarbe zu. Dieses Javascript fokussiert sich
aber auf den Internet Explorer und schließt insbesondere bei der
Farbsetzung alle Browser außer dem IE aus. Zudem produziert es im Firefox
bei der Ausführung einen Fehler:

Fehler: [Exception... "Component returned failure code: 0x80520012
(NS_ERROR_FILE_NOT_FOUND) [nsIDOMLocation.href]"  nsresult: "0x80520012
(NS_ERROR_FILE_NOT_FOUND)"  location: "JS frame :: [...]/tiny_mce.js ::
TinyMCE_setupContent :: line 9"  data: no]
Quelldatei: [...]/tiny_mce.js
Zeile: 9

Was kannst Du also jetzt tun?

Entweder, die Nutzer des Gästebuchs finden sich mit Deinem Standardlayout
ab, oder Du ermöglichst ihnen, ein paar CSS-Werte für ihr Gästebuch auf
Deinem Server zu setzen.


>> Auch aufgefallen ist mir dieses:
>>
>> <table width="0%" height="0%">
>> width und height gleich 0%? ;-)
>
> Yep, damit passt sich der <table> automatisch an.

Da kannst Du aber froh sein, daß die Browser so nett zu Dir sind. :-)
Eigentlich dürftest Du bei 0% gar nichts sehen. Die Angabe ist nämlich
unlogisch. Was sind denn 0% von der Bilschirmbreite oder einem Teil
derselben? Ich würde mal sagen 0 Pixel, oder? ;-)

"height" ist übrigens laut W3C-Spezifikation kein erlaubtes Attribut von
<table>, so daß Du es ohnehin weglassen solltest, und "width" ist ein
optionales ("#IMPLIED"), so daß Du es angeben kannst, aber eben nicht
mußt.

Also bevor Du <table width="0%" height="0%" ...> schreibst, schreib lieber
<table ...>. Das ist zwar nicht schön, aber wenigstens korrekt und
erreicht dasselbe.


Viele Grüße

Lutz


php::bar PHP Wiki   -   Listenarchive