Internet Explorer und Firefox
poison
- javascript
Hallo Zusammen,
ich habe eine Frage zu einem fertigen Script, dass ich gerne für meine Homepage verwenden möchte. Das ganze besteht aus 3 Teilen: sample.html, puzzlex.html und puzzle.js. In einer readme.html war noch eine Anleitung dabei, wie man die HTML-Abschnitte des Scripts anpassen muss, damit das Puzzle funktioniert. Ich habe alles angepasst und könnte nun auch durchstarten, ABER:
Es kann nur gespielt werden, wenn man die diverse Seite mit dem Internet Explorer öffnet, mit Firefox geht es nicht. Da immer mehr Nutzer auf Firefox umsteigen, ist das (meiner Meinung nach) schlecht, vor allem, weil die Seite zum geschützten Bereich der Homepage gehört.
Ich kenne mich mit JAVA gar nicht aus und da ich es auf meiner Seite eigentlich nur für dieses Puzzle verwende, hatte ich bis jetzt auch nicht den Anspruch es zu lernen. Das einzige, was ich aus den Dateien herauslesen konnte war, das hier ganz klar IE4 (Internet Explorer 4) und NN4 (Netscape 4) vorgegeben sind. Diese Eingaben habe ich schon versucht mit Firefox (FF3, ich meine, ich habe die Version 3.6 auf dem Rechner) zu überschreiben, das hat aber nichts gebracht.
Darum meine Frage, ob man die Dateien überhaupt auf den Gebrauch mit Firefox anpassen kann. Falls nicht, muss ich mir was anderes überlegen.
Hier mal eine Datei zur Übersicht (mehr darf ich wegen Geschwätzigkeit nicht einstellen :-))):
puzzlex.js
[code lang=javascript]
// ------ this function is all you need to modify in this script ------
function defineImages() {
picPool[0] = new picPara("puzzle1.jpg",640,480,5,4,10,"image from Hogwarts-Express, 640x480, 5x4, 45kb");
picPool[1] = new picPara("puzzle2.jpg",640,480,5,4,10,"image from Hogwarts, 640x480, 5x4, 45kb");
picPool[2] = new picPara("puzzle3.jpg",540,420,5,4,10,"image from Zaubereiministerium, 540x420, 5x4, 24kb");
picPool[3] = new picPara("puzzle4.jpg",540,420,5,4,10,"image from Große Halle, 540x420, 5x4, 24kb");
}
//------ you don't need to care about the following codes ------
var isIE4 = false; isNN4 = false;
var picPool = new Array();
var pic_image_source = "";
var pic_image_width = 0;
var pic_image_height = 0;
var pic_grip_x = 1;
var pic_grip_y = 1;
var pic_table_gap = 0;
var puzzle_window = null;
function mouseHover() {
window.status = picPool[this.index].info;
return true;
}
function mouseGone() {
window.status = window.defaultStatus;
return true;
}
function mouseClick() {
goPuzzleX(this.index);
return false;
}
function picPara(image_source,image_width,image_height,grip_x,grip_y,table_gap,image_info) {
this.source = image_source;
this.width = image_width;
this.height = image_height;
this.grip_x = grip_x;
this.grip_y = grip_y;
this.table_gap = table_gap;
this.info = image_info;
}
function setupImages() {
isIE4 = (document.all)?true:false; isNN4 = (document.layers)?true:false;
defineImages();
var linksCount = document.links.length, hashIndex = -1, puzzleIndex = -1, hashTag = "puzzlex";
for (var i = 0; i < linksCount; i++) {
hashIndex = document.links[i].hash.indexOf(hashTag);
if (hashIndex != -1) {
puzzleIndex = parseInt(document.links[i].hash.substring(hashIndex+7));
document.links[i].index = puzzleIndex;
document.links[i].onmouseover = mouseHover;
document.links[i].onmouseout = mouseGone;
document.links[i].onclick = mouseClick;
}
}
}
function Build_Puzzle() {
var window_para = "width=" + (pic_image_width + pic_table_gap * 6) +",height=" + (pic_image_height + pic_table_gap * 6) + ",titlebar=1";
if (isIE4 || isNN4) {
if (puzzle_window != null)
if (!puzzle_window.closed)
puzzle_window.close();
puzzle_window = window.open("puzzlex.html", "Puzzle_Window", window_para); }
else {
alert("Sorry !\nYou need a version 4 or above browser.");
}
}
function goPuzzleX(pic_index) {
pic_image_source = picPool[pic_index].source;
pic_image_width = picPool[pic_index].width;
pic_image_height = picPool[pic_index].height;
pic_grip_x = picPool[pic_index].grip_x;
pic_grip_y = picPool[pic_index].grip_y;
pic_table_gap = picPool[pic_index].table_gap;
Build_Puzzle();
}
Ich erwarte nicht, dass mir jemand die Dinger umschreibt. Es wäre für mich nur wichtig zu wissen, ob man das Puzzle je mit Firefox zum laufen kriegen könnte.
Viele Grüße
Poison
@@poison:
nuqneH
var isIE4 = false; isNN4 = false;
Hier werden die booleschen Variablen isIE4
und isNN4
mit dem Wert false
initialisiert.
isIE4 = (document.all)?true:false; isNN4 = (document.layers)?true:false;
Hier wird, wenn der Browser document.all
kennt, isIE4
auf true gesetzt. Das ist völliger Unsinn, weil inzwischen auch andere Browser document.all
kennen.
Der '?:
'-Operator ist auch überflüssig; isIE4 = (document.all);
hätte völlig genügt.
Und es wird, wenn der Browser document.layers
kennt, isNN4
auf true gesetzt. Das ist völliger Unsinn, weil Browser, die document.layers
kennen inzwischen ausgestorben sind.
Der '?:
'-Operator ist auch überflüssig, aber das sagte ich schon.
if (isIE4 || isNN4) {
Hier fragst du ab, ob die eine oder andere Bedingung erfüllt ist. Firefox kennt weder document.all
noch document.layers
, folglich sind isIE4
und isNN4
noch mit false
belegt und es wird in den else
-Zweig gesprungen:
else {
alert("Sorry !\nYou need a version 4 or above browser.");
Hier wird der Nutzer verarscht.
Qapla'
Hi Gunnar,
du hast natuerlich absolut recht mit Deinen Ausfuehrungen. Andererseits sieht das Script auf den ersten Blick so aus als muesste man nur
if (isIE4 || isNN4) {
durch
if (true) {
umm es zum laufen zu bringen. Ok das ist sehr schmutzig, aber einfach.
Gruss
Dieter
@@Dieter Raber:
nuqneH
du hast natuerlich absolut recht mit Deinen Ausfuehrungen. Andererseits sieht das Script auf den ersten Blick so aus als muesste man nur
if (isIE4 || isNN4) {
durch
if (true) {
umm es zum laufen zu bringen. Ok das ist sehr schmutzig, aber einfach.
Yep. Ich hatte ja erklärt, warum der Fuchs in den Else-Zweig springt. Dies zu verhindern und ihn den Code ausführen zu lassen, der für moderne Browser wie IE 4 und Netscape 4 (hehe) gedacht ist, wollte ich dem OP überlassen.
<♫>Ein bisschen SELF muss sein
Dann funzt der Code von ganz allein</♫>
Qapla'
PS: Noch einfacher wäre wohl 'if (true || isIE4 || isNN4) {
', dann muss nichts gelöscht werden. ;-)
Sinnvoller wäre es, die Abfrage ganz rauszuschmeißen. Und die Deklarationen von und Wertzuweisungen an isIE4 und isNN4.
Hi,
alert("Sorry !\nYou need a version 4 or above browser.");
Hier wird der Nutzer verarscht.
Wieso? Firefox ist doch erst bei Version 3.x - da muß man halt noch etwas warten, in Version 4 wird dann document.layers implementiert sein ;-)
cu,
Andreas
Hi there,
Hier wird, wenn der Browser
document.all
kennt,isIE4
auf true gesetzt. Das ist völliger Unsinn, weil inzwischen auch andere Browserdocument.all
kennen.
Das ändert aber nichts daran, daß andere Browser, obwohl sie document.all kennen, bei der Abfrage nach document.all false zurückgeben; somit document.all sehr wohl zur Abfrage nach "IE-heit" verwendet werden kann...
Hier fragst du ab, ob die eine oder andere Bedingung erfüllt ist. Firefox kennt weder
document.all
[...]
Jetzt widersprichst Du Dir selbst (auch wenn Du zuvor in den "anderen" Browsern den FF nicht explizit erwähnst...;)
Bounjoun Klawischnigg,
Das ändert aber nichts daran, daß andere Browser, obwohl sie document.all kennen, bei der Abfrage nach document.all false zurückgeben; somit document.all sehr wohl zur Abfrage nach "IE-heit" verwendet werden kann...
Warum gibt es in älteren Skripten solche Abfragen:
if(document.all && !window.opera) { ... }
Adiou.
Hi there,
Warum gibt es in älteren Skripten solche Abfragen:
if(document.all && !window.opera) { ... }
Offensichtlich ein Designfehler...;)
Bounjoun Klawischnigg,
if(document.all && !window.opera) { ... }
Offensichtlich ein Designfehler...;)
Vom Skript-Autor oder von der Opera-Schmiede? Ich meine, mich zu erinnern, selbst die Erfahrung gemacht zu haben, dass »&&!window.opera«, zumindest bis Version 8, notwendig war, um wirklich nur den IE anzusprechen...
Adiou.
Hi there,
if(document.all && !window.opera) { ... }
Offensichtlich ein Designfehler...;)Vom Skript-Autor oder von der Opera-Schmiede?
Von den Opera-Erzeugern. Aus gutem Grund waren die anderen Browserhersteller so clever zu berücksichtigen, daß mit document.all der IE abgefragt wurde.
Daß es natürlich viel mehr Sinn macht, auf die Eigenschaft zu testen, die man auch verwenden möchte, ist heutzutage Allgemeinwissen, nichtsdestotrotz bleibe ich dabei, daß die Operaproduzenten bei der Abfrage nach document.all nicht gut beraten waren...
[latex]Mae govannen![/latex]
Von den Opera-Erzeugern. Aus gutem Grund waren die anderen Browserhersteller so clever zu berücksichtigen, daß mit document.all der IE abgefragt wurde.
Klar, die konnten sich ja auch in Ruhe anschauen, welche Probleme Operas document.all-Support bereitete und dann aus diesen Fehlern lernen, als sie wesentlich später ebenfalls document.all untertützt haben. Es ist immer einfacher, die Fehler, die Andere bereits gemacht haben, zu vermeiden. :)
Cü,
Kai
Hi there,
Klar, die konnten sich ja auch in Ruhe anschauen, welche Probleme Operas document.all-Support bereitete und dann aus diesen Fehlern lernen, als sie wesentlich später ebenfalls document.all untertützt haben. Es ist immer einfacher, die Fehler, die Andere bereits gemacht haben, zu vermeiden. :)
Verstehe, diese Chronologie war mir nicht bekannt, ich hätte gedacht, daß es eher umgekehrt war...;)
Hallo,
Warum gibt es in älteren Skripten solche Abfragen:
if(document.all && !window.opera) { ... }
Offensichtlich ein Designfehler...;)
so kann man es auch sagen. Wohl eher das Bestreben der Norweger, den Browser-Platzhirsch so gut wie möglich zu imitieren.
Ciao,
Martin
@@poison:
nuqneH
Ich kenne mich mit JAVA gar nicht aus
Java-Kenntnisse sind bei JavaScript auch nicht erforderlich.
Die Erkenntnis, dass beides nicht viel gemein hat, hingegen schon.
Qapla'