poison: Internet Explorer und Firefox

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

  1. @@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'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)
    1. 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

      1. @@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.

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)
    2. 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

      --
      Warum nennt sich Andreas hier MudGuard?
      O o ostern ...
      Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
    3. Hi there,

      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.

      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...;)

      1. 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.

        1. Hi there,

          Warum gibt es in älteren Skripten solche Abfragen:

          if(document.all && !window.opera) { ... }

          Offensichtlich ein Designfehler...;)

          1. 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.

            1. 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...

              1. [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

                --
                Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken in Richtung "Mess up the Web". (suit)
                Foren-Stylesheet Site Selfzeug JS-Lookup
                SelfCode: sh:( fo:| ch:? rl:( br:< n4:( ie:{ mo:| va:) js:| de:> zu:) fl:( ss:| ls:?
                1. 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...;)

          2. 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

            --
            Dieser Satz wurde in mühsamer Kleinstarbeit aus einzelnen Wörtern zusammengesetzt.
              (Hopsel)
            Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
  2. @@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'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)