Schönen Abend!
WTF?
Ich weiß ja dass IE und Firefox bei clientseitigen Scripts Probleme machen aber was hat das mit PHP zu tun?
Grund der Verwirrung ist folgender Source:
<?
$height = $_GET['height'];
$width = $_GET['width'];
if($height == "" || $width == ""){
echo "<script language=\"JavaScript\" type=\"text/JavaScript\"> \n";
echo "<!--\n";
echo "var width;\n";
echo "var height;\n";
echo "if ( window.innerWidth && window.innerHeight && window.innerWidth != \"undefined\" && window.innerHeight != \"undefined\") {\n";
echo " width = window.innerWidth;\n";
echo " height = window.innerHeight;\n";
echo "} else if ( document.body && document.body.offsetWidth && document.body.offsetHeight ) {\n";
echo " width = document.body.offsetWidth;\n";
echo " height = document.body.offsetHeight;\n";
echo "}\n";
echo "location.href = \"index.php?width=\"+width+\"&height=\"+height;\n";
echo "//->\n";
echo "</script>\n";
}
?>
Alles anzeigen
Sprich, wenn php keine GET-Variablen bekommt, soll ein Javascript eingefügt werden, das die Seite mit den GET-Variablen neu lädt.
Dann:
<script language="javascript">
function reload() {
var nwidth;
var nheight;
if ( window.innerWidth && window.innerHeight && window.innerWidth != "undefined" && window.innerHeight != "undefined") {
nwidth = window.innerWidth;
nheight = window.innerHeight;
} else if ( document.body && document.body.offsetWidth && document.body.offsetHeight ) {
nwidth = document.body.offsetWidth;
nheight = document.body.offsetHeight;
}
location.href = "index.php?width="+nwidth+"&height="+nheight;
}
window.onresize = reload;
</script>
Alles anzeigen
Wird das Fenster "resized", wird wieder neu geladen.
Erst wird abgefragt ob window.innerWidth bekannt ist und nicht "undefined" liefert, wenn das nicht der Fall ist (IE) werden die Werte vom document verwendet.
In Firefox sieht diese Abfrage im Source in beiden Fällen so aus:
if ( window.innerWidth && window.innerHeight && window.innerWidth != "undefined" && window.innerHeight != "undefined") {
width = window.innerWidth;
height = window.innerHeight;
} else if ( document.body && document.body.offsetWidth && document.body.offsetHeight ) {
width = document.body.offsetWidth;
height = document.body.offsetHeight;
}
location.href = "index.php?width="+width+"&height="+height;
Im IE allerdings so:
if ( window.innerWidth && window.innerHeight ) {
width = window.innerWidth;
height = window.innerHeight;
} else if ( document.body && document.body.offsetWidth && document.body.offsetHeight ) {
width = document.body.offsetWidth;
height = document.body.offsetHeight;
}
location.href = "index.php?width="+width+"&height="+height;
Wem fällt was auf?
Der kleine, feine Unterschied ist, dass IE7 window.innerWidth sehr wohl kennt aber "undefined" zurückliefert, weshalb dieser Kas natürlich ned funktioniert.
Vorschläge warum das so ist oder besser, wie man es umgeht? Ich bekomm nämlich schon Migräne
Und sorry für den ewig langen Post
Robert
edit: Ärger seltsam
Hab die Reihenfolge der Abfrage geändert, sodass zuerst IE erkannt wird und wenns keiner ist, kommt Firefox dran. Firefox hat den neuen Source richtig angezeigt, IE zeigt noch immer den alten an!
Hab ein bissl Text eingefügt, der wird im IE angezeigt, die Scripts sind unverändert...