Claus Peter: PopUp lässt InternetExplorer abstürzen

Hallo,

jetzt grüble ich schon seit Tagen drüber und komme nicht weiter. Mittels JavaScript soll ein PopUp Fenster aufgemacht werden. Der Inhalt des PopUps wird vollständig dynamisch durch die Webseite geschrieben. Je nach Aufbau des JavaScript stürzt dabei IE 6 SP1 ab. Offenbar versucht der IE dabei, den Inhalt der aufrufenden HTML-Seite im PopUp darzustellen. Nach meinen letzten Erkenntnissen liegts an der Einbindung externer JavaScript Dateien in dem PopUp (die Pfade stimmen). Wenn ich die 3 Zeilen mit den externen JavaScript Referenzen weglasse, funzt es. Es geht auch, wenn ich open() und close() weglasse und alles in einem write() Befehl schreibe, nur dann mags Mozilla nicht mehr. Letztendlich traue ich dieser Lösung aber nicht so richtig über den Weg.

Für den entscheidenen Tip sage ich schon mal vielen Dank.

mfg

Claus Peter

Hier mal zur Erläuterung der Quelltext:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html>

<head>   <title>system telefonie user Analog11</title>

<meta http-equiv="expires" content="0">   <meta http-equiv=Content-Language content="de">   <meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">   <link rel="stylesheet" type="text/css" href="../../../layout.css">

<script language="JavaScript" src="../../../tliste/jscript/common.js" type="text/javascript"></script>   <script language="JavaScript" src="../../../tliste/jscript/strstr.js" type="text/javascript"></script>   <script language="JavaScript" src="../../../tliste/jscript/reqparam.js" type="text/javascript"></script>   <script language="JavaScript" src="../../../tliste/jscript/jserror.js" type="text/javascript"></script>   <script language="JavaScript" src="../../jscript/common.js" type="text/javascript"></script>   <script language="JavaScript" type="text/javascript">   <!--     // miscellaneous     var pszErrTxtIntNumNo = "Unbekannter interner Teilnehmer";     var pszErrTxtExtNumNo = "Unbekannte MSN / DDI";

var aszIntNums = new Array ("11","12","13","14","15","16","17","20","21","30","31","40","41", "");     var aszExtNums = new Array ("43730","43731", "");     // end of var     var WindowChoice=null;     var iXPos;     var iYPos;

// browser switch     var nc  = !!(document.captureEvents && !document.documentElement);     var ie  = !!document.all;     var ie4 = !!(!document.documentElement && document.all);     var dom = !!document.documentElement;     // var dom = !!document.getElementById;     var dom2 = !!(dom && document.implementation && document.implementation.hasFeature("MouseEvents", "2.0"))     var nc6 = !!(dom && (!document.all));     var mac = !!(navigator.userAgent.indexOf("Mac")!=-1);

if(dom2) document.addEventListener("click", getXY, true);

function getXY(event)     {       // iXPos = event.clientX;       // iYPos = event.clientY;       iXPos = event.screenX;       iYPos = event.screenY;     }

function NumChoice(pszDestName, pszAssociatedEltName)     {       // external options list       var ExtOptList = (       "  <select class="FormFieldList" name="LIST" size="1" onChange="javascript:CopyKeyInfo(pszDestName)">\r\n" +       "    <option value="">Liste externer MSN/DDI</option>\r\n" +       "    <option value="43730">43730</option>\r\n" +       "    <option value="43731">43731</option>\r\n" +       "  </select>\r\n");

// internal options list       var IntOptList = (       "  <select class="FormFieldList" name="LIST" size="1" onChange="javascript:CopyKeyInfo(pszDestName)">\r\n" +       "    <option value="">Liste interner Teilnehmer</option>\r\n" +       "    <option value="11">11 - Analog11</option>\r\n" +       "    <option value="12">12 - Analog12</option>\r\n" +       "    <option value="13">13 - Analog13</option>\r\n" +       "    <option value="14">14 - Analog14</option>\r\n" +       "    <option value="15">15 - Analog15</option>\r\n" +       "    <option value="16">16 - Analog16</option>\r\n" +       "    <option value="17">17 - Analog17</option>\r\n" +       "    <option value="20">20 - ISDN20</option>\r\n" +       "    <option value="21">21 - ISDN21</option>\r\n" +       "    <option value="30">30 - ISDN30</option>\r\n" +       "    <option value="31">31 - ISDN31</option>\r\n" +       "    <option value="40">40 - ISDN40</option>\r\n" +       "    <option value="41">41 - ISDN41</option>\r\n" +       "  </select>\r\n");

var pAssElt = document.getElementsByName(pszAssociatedEltName)[0];       var pList = IntOptList;

if(!dom2 || ie)       {         iXPos = ie? window.event.clientX : (nc? window.event.screenX : (screen.width/2)-150);         iYPos = ie? window.event.clientY : (nc? window.event.screenY : (screen.height/2)-25);       }       if(nc6)       {         iXPos -= 250;         iYPos -= 200;       }       else       {         iXPos -= 125;       }

if(null==pAssElt) return SendJSError(pszErrTxtVarNotDef, "pAssElt");       if(pAssElt.value=="EXT") pList = ExtOptList;

WindowChoice=window.open(""about:blank"","List","width=300, height=50, left=" + iXPos +", top=" + iYPos +"scrollbars=no");       WindowChoice.document.open();

with(WindowChoice.document)       {       write(       "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\r\n" +       "<html>\r\n" +       "<head>\r\n" +       "  <title>select number</title>\r\n" +       "  <meta http-equiv="expires" content="0">\r\n" +       "  <meta http-equiv=Content-Language content="de">\r\n" +       "  <meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">\r\n" +       "  <link rel="stylesheet" type="text/css" href="../../../layout.css">\r\n" +

// ----------------------------------------------- // diese 3 Zeilen sinds offenbar....

"  <script language="JavaScript" src="../../../admin/jscript/common.js" type="text/javascript"></script>\r\n" +       "  <script language="JavaScript" src="../../../tliste/jscript/common.js" type="text/javascript"></script>\r\n" +       "  <script language="JavaScript" src="../../../tliste/jscript/jserror.js" type="text/javascript"></script>\r\n");

// -----------------------------------------------

write(       "  <script language="JavaScript" type="text/javascript">\r\n" +       "     var pszDestName = "" + pszDestName + "";\r\n" +       "\r\n" +       "     function CopyKeyInfo(pszId)\r\n" +       "     {\r\n" +       "       var pSource=document.getElementsByName("LIST")[0];\r\n" +       "       var pDest\r\n" +       "\r\n" +       "       if(null == window.opener) return SendJSError(pszErrTxtVarNotDef, "window.opener");\r\n" +       "       if(null!=pSource)\r\n" +       "       {\r\n" +       "         pDest=eval(window.opener.document.getElementsByName(pszDestName)[0]);\r\n" +       "         if(pDest) {\r\n" +       "           pDest.value=pSource.value;}\r\n" +       "         else {\r\n" +       "           SendJSError(pszErrTxtVarNotDef, "pDest");\r\n" +       "           window.close();}\r\n" +       "         pSource.selectedIndex=0;\r\n" +       "         window.close();\r\n" +       "       }\r\n" +       "       else {\r\n" +       "         SendJSError(pszErrTxtVarNotDef, "pSource");\r\n" +       "         window.close();}\r\n" +       "     }\r\n" +       "  </script>\r\n" +       "</head>\r\n" +       "<body bgcolor="#FFFF0F">\r\n" +       "<table border="0" width="100%">\r\n" +       "<tr><td align="center" valign="middle" height="100%">\r\n");

write(pList);

write(       "</td></tr>\r\n" +       "</table>\r\n" +       "</body>\r\n" +       "</html>\r\n");       }       WindowChoice.document.close();       WindowChoice.focus();     }   // -->   </script> </head>

<body> ..... usw.

  1. Sup!

    Hast Du mal versucht, einen "minimum case" daraus zu machen?
    Also soviel wie möglich wegzukürzen?

    Das würde die Sache viel übersichtlicher machen...

    Gruesse,

    Bio

    --
    Ich will Euch doch nur helfen!!!
    1. Hallo zusammen,

      erstmal Danke für Euren Einsatz.

      @Bio: habs mal kleiner gemacht.......,
      also die Browser-Weiche entfernt (stammt aus dem Forum, nicht von mir) Den fertigen Code (wenn der Explorer mal nicht abstürzt) habe ich schon durch nen Syntx-Checker laufen lassen, ist OK.

      @Danny: Danke für den Tip zu Escape-Umgehung, werde ich noch umsetzen. Habe die Dinger wirklich zu Fuss programmiert, herrje!!!

      Sobald ich im PopUp mit write() die externen Scripte dazuschalte, stürzt der IE ab.
      Allerdings nicht, wenn ich die Seite lokal von Platte starte, nur, wenns vom Server kommt.

      @08/15: Sorry, der gepostete Code hatte keinen HTML-Rumpf

      So ganz sicher bin ich mir auch noch nicht, daß es an den externen Scipten liegt. Zumal ich bei deren Einbindung keinen Fehler festellen kann.

      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
      <html>

      <head>
        <title>system telefonie user Analog12</title>

      <meta http-equiv="expires" content="0">
        <meta http-equiv=Content-Language content="de">
        <meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
        <link rel="stylesheet" type="text/css" href="../../../layout.css">

      <script language="JavaScript" src="../../../tliste/jscript/common.js" type="text/javascript"></script>
        <script language="JavaScript" src="../../../tliste/jscript/strstr.js" type="text/javascript"></script>
        <script language="JavaScript" src="../../../tliste/jscript/reqparam.js" type="text/javascript"></script>
        <script language="JavaScript" src="../../../tliste/jscript/jserror.js" type="text/javascript"></script>
        <script language="JavaScript" src="../../jscript/common.js" type="text/javascript"></script>
        <script language="JavaScript" type="text/javascript">
        <!--
          // miscellaneous
          var pszErrTxtIntNumNo = "Unbekannter interner Teilnehmer";
          var pszErrTxtExtNumNo = "Unbekannte MSN / DDI";

      var aszIntNums = new Array ("50","51","60","61","70","12","13","14","15","16","17","20","21","30","31","40","41", "");
          var aszExtNums = new Array ("43730","43731", "");
          // end of var
          var _WindowChoice_=null;

      function NumChoice()
          {
            _WindowChoice_=window.open(""about:blank"","List","width=300, height=50, scrollbars=no");

      with(_WindowChoice_.document) {
            open();
            write(
            "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\r\n" +
            "<html>\r\n" +
            "<head>\r\n" +
            "  <title>select number</title>\r\n" +
            "  <meta http-equiv="expires" content="0">\r\n" +
            "  <meta http-equiv=Content-Language content="de">\r\n" +
            "  <meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">\r\n" +
            "  <link rel="stylesheet" type="text/css" href="../../../layout.css">\r\n");

      // ---------------------------------------------
            write("  <script language="JavaScript" src="../../../admin/jscript/common.js" type="text/javascript"></script>\r\n");
            write("  <script language="JavaScript" src="../../../tliste/jscript/common.js" type="text/javascript"></script>\r\n");
            Write("  <script language="JavaScript" src="../../../tliste/jscript/jserror.js" type="text/javascript"></script>\r\n");
      // ---------------------------------------------

      write(
            "</head>\r\n" +
            "<body bgcolor="#FFFF0F">\r\n" +
            "Hello world\r\n" +
            "</body>\r\n" +
            "</html>\r\n");
            close();
            }
            _WindowChoice_.focus();
          }

      // -->
        </script>
      </head>

      <body>
      <a href="javascript: NumChoice()">Testfenster</a>
      </body>
      </html>

      1. Moin!

        So ganz sicher bin ich mir auch noch nicht, daß es an den externen Scipten liegt. Zumal ich bei deren Einbindung keinen Fehler festellen kann.

        Mal ganz dumm gedacht: Du bindest externe Skripte durch einen relativen Pfad ein.

        Das ist kein Problem, wenn die einbindende Seite ein vernünftiges Protokoll, Server, Pfad etc. hat.

        Wenn du aber ein neues Browserfenster aufmachst und da mit Javascript reinkritzelst, dann hat das Fenster eben gerade _keinen_ Server, kein Protokoll und keinen Pfad, von dem aus es geladen wurde und relativ zu dem sich relative Pfadangaben berechnen lassen.

        Insofern würde ich an deiner Stelle zuallererst mal nur folgendes per Javascript in das Fenster reinschreiben lassen:

        alert(location.href);

        Dann siehst du, was als Grundlage für die Berechnung relativer Links benutzt wird. Und wenn das nicht das ist, was du erwartet hast, dann wirst du mit absoluten Angaben arbeiten müssen. Die dafür notwendigen Angaben stehen dir in der Ausgangsseite ja zur Verfügung.

        - Sven Rautenberg

        --
        "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
        (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)
        1. Sup!

          Wenn natuerlich die relativen Pfade, die zu nichts relativ sind, den IE absemmeln lassen, faende ich das hoechst amuesant.
          Waere ein Fall fuer PAFs Halle der Gemeinheiten - oder fuer einen Outlook-HTML-Mail-Wurm.

          Gruesse,

          Bio

          --
          Ich will Euch doch nur helfen!!!
          1. Hallo,

            hmm, nicht schlecht der Gedanke. Habs grad mal eingehackt, angezeigt wird allerdings der Pfad des openers (also OK). Reload geht auch. Im Gegensatz zu Opera (7.11), der zeigt dann tatsächlich den Inhalt des Openers an und nicht den Inhalt des PopUps...

            Wenn ich die relativen in absolute Pfade ändere, semmelt der IE trotzdem weg. Da allerdings noch nicht mal das alert() im lokalen script Bereich ausgeführt wird, scheints also immer mehr an den includierten scripts zu liegen ...  warum auch immer.

            Viele Grüsse

            Claus Peter

            1. scheints also immer mehr an den includierten scripts zu liegen ...  warum auch immer.

              Logisch !
              Wenn ich den gesamten Bereich deaktiviere ...
              /* ---------------------------------------------
                    write("  <script language="JavaScript" src="../../../admin/jscript/common.js" type="text/javascript"></script>\r\n");
                    write("  <script language="JavaScript" src="../../../tliste/jscript/common.js" type="text/javascript"></script>\r\n");
                    Write("  <script language="JavaScript" src="../../../tliste/jscript/jserror.js" type="text/javascript"></script>\r\n");
               ---------------------------------------------*/
              ... klappt's einwandfrei!
              Das große W da drin sieht übrigens auch nicht so toll aus !
              :o)

              1. Hi,

                scheint alles auf ein Timing Problem hinauszulaufen. Wenn ich vor der Includierung der externen Scripte ein lokales alert() ausführe, semmelt der IE nicht mehr weg. Dies betrifft IE6 SP1 und IE5.00. Opera 7.11 und Mozilla 1.4 führen das Script einwandfrei aus. Fragt sich, wie man für den IE bei dynamisch erzeugten PopUps überhaupt Referenzen auf externe JavaScripte einbinden kann. Naja, in diesem Fall werde ich die benötigten Funktionen halt nochmal schreiben und auf die Includierung der Scripte verzichten.

                Vielen Dank noch mal an dieser Stelle für Eure Hilfe. Die Hinweise haben mir sehr geholfen.

                Viele Grüße

                Claus Peter

                Hier nochmal der Quellcode zum Testen, wer möchte:

                <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
                <html>

                <head>
                  <title>system telefonie user Analog12</title>

                <meta http-equiv="expires" content="0">
                  <meta http-equiv=Content-Language content="de">
                  <meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
                  <link rel="stylesheet" type="text/css" href="../../../layout.css">

                <script language="JavaScript" src="../../../tliste/jscript/common.js" type="text/javascript"></script>
                  <script language="JavaScript" src="../../../tliste/jscript/strstr.js" type="text/javascript"></script>
                  <script language="JavaScript" src="../../../tliste/jscript/reqparam.js" type="text/javascript"></script>
                  <script language="JavaScript" src="../../../tliste/jscript/jserror.js" type="text/javascript"></script>
                  <script language="JavaScript" src="../../jscript/common.js" type="text/javascript"></script>
                  <script language="JavaScript" type="text/javascript">
                  <!--
                    var _WindowChoice_=null;

                function NumChoice()
                    {
                      _WindowChoice_=window.open(""about:blank"","List","width=300, height=50, scrollbars=no");

                with(_WindowChoice_.document) {
                      open();
                      write(
                      "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">\r\n" +
                      "<html>\r\n" +
                      "<head>\r\n" +
                      "  <title>select number</title>\r\n" +
                      "  <meta http-equiv="expires" content="0">\r\n" +
                      "  <meta http-equiv=Content-Language content="de">\r\n" +
                      "  <meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">\r\n" +
                      "  <link rel="stylesheet" type="text/css" href="../../../layout.css">\r\n"/* +
                      "  <script language="JavaScript" type="text/javascript">\r\n" +
                      "    alert("Hello world")\r\n" +
                      "  </script>\r\n"*/);

                // ---------------------------------------------
                      write("  <script language="JavaScript" src="../../../admin/jscript/common.js" type="text/javascript"></script>\r\n");
                      write("  <script language="JavaScript" src="../../../tliste/jscript/common.js" type="text/javascript"></script>\r\n");
                      write("  <script language="JavaScript" src="../../../tliste/jscript/jserror.js" type="text/javascript"></script>\r\n");
                // ---------------------------------------------

                write(
                      "</head>\r\n" +
                      "<body bgcolor="#FFFF0F">\r\n" +
                      "Hello world\r\n" +
                      "</body>\r\n" +
                      "</html>\r\n");
                      close();
                      }
                      _WindowChoice_.focus();
                    }

                // -->
                  </script>
                </head>

                <body>
                <a href="javascript: NumChoice()">Testfenster</a>
                </body>
                </html>

                @08/15: die FEStstelltaste habe ich inzwischen geölt ;-)

                1. Hi,

                  scheint alles auf ein Timing Problem hinauszulaufen. Wenn ich vor der Includierung der externen Scripte ein lokales alert() ausführe, semmelt der IE nicht mehr weg. Dies betrifft IE6 SP1 und IE5.00. Opera 7.11 und Mozilla 1.4 führen das Script einwandfrei aus. Fragt sich, wie man für den IE bei dynamisch erzeugten PopUps überhaupt Referenzen auf externe JavaScripte einbinden kann. Naja, in diesem Fall werde ich die benötigten Funktionen halt nochmal schreiben und auf die Includierung der Scripte verzichten.

                  Vielleicht solltest du mal testen ob du die Skripte nciht wiederverwenden kannst.

                  Hier nochmal der Quellcode zum Testen, wer möchte:

                  <script language="JavaScript" src="../../../tliste/jscript/common.js" type="text/javascript"></script>
                    <script language="JavaScript" src="../../../tliste/jscript/strstr.js" type="text/javascript"></script>
                    <script language="JavaScript" src="../../../tliste/jscript/reqparam.js" type="text/javascript"></script>
                    <script language="JavaScript" src="../../../tliste/jscript/jserror.js" type="text/javascript"></script>
                    <script language="JavaScript" src="../../jscript/common.js" type="text/javascript"></script>
                    <script language="JavaScript" type="text/javascript">

                  [...]

                  // ---------------------------------------------
                        write("  <script language="JavaScript" src="../../../admin/jscript/common.js" type="text/javascript"></script>\r\n");
                        write("  <script language="JavaScript" src="../../../tliste/jscript/common.js" type="text/javascript"></script>\r\n");
                        write("  <script language="JavaScript" src="../../../tliste/jscript/jserror.js" type="text/javascript"></script>\r\n");
                  // ---------------------------------------------

                  Du bindest ja hier offensichtlich 2 mal die gleichen Skripte ein und zudem hab ich dir 2 mal einen Rat gegeben, den du aber zu ignorieren scheinst.

                  Dem Browser ist es a.) wesentlich lieber zu du packst die Ausgabe in einem String und b.) kannst du dieses Aushgabe besser kontrollieren. Bei deinen - ebenfalls nach wie vor vorhandenen - Escapeorgien könnte das sehr hilfreich sein, zu sehen ob die Ausgabe das macht was du erwartest.

                  Struppi.

                  1. Hallo,

                    also zunächst einma folgendes: Nachdem ich auf eindringlichen Rat zuerst alles in eine Variable geschrieben und dann zusammen ausgegeben habe, funktionierts auch mit IE! Das bestätigt indirekt die Vermutung, dass hier das Timing Probleme bereitet. Die Abarbeitung des Write() aus einer Variablen heraus läuft halt anders.

                    Sorry, dass ich dem nicht gleich nachgekommen bin ;-((((

                    @Struppi(1): Die Wiederholung der Script-Includierungen ist für das PopUp. Sonst können die Scripte nicht aus dem PopUp heraus aufgerufen werden.

                    @Struppi(2): Ich habs jetzt mit beiden Varianten ausprobiert. Mal mit " als Delimiter und mal mit '. Es macht keinen Unterschied. Naja, ok, einfacher ists mit '! Werde dies zukünftig auch so durchhalten. Deine Browserweiche- und Mauspositionstips werde ich noch ausprobieren, ich bin erstmal froh, dass die Mühle läuft.....

                    @Struppi(3): Naja, die ganze Seite habe ich in der Tat nicht gepostet, schon die abgespeckte Version hat ja zu Protesten geführt. Der gepostete Quelltext hat allerdings (auf dem Server, nicht lokal) bei mir immer den Fehler gezeigt. Der Inhalt der JS-Includes ist nicht weltbewegend. Letztendlich hätte es nur zu Verwirrung geführt, wenn ich das auch noch gepostet hätte.

                    @Struppi(4): Aufgrund Deines Hinweises hab ichs jetzt noch mal mit einem einzelnen JavaScript-Include ausprobiert, bestehend aus einer einzigen Funktion mit einer Zeile. Es ändert nichts am Ergebnis: Der IE mags nicht, wenn er den Inhalt des PopUp nicht am Stück serviert bekommt.

                    Viele Grüsse

                    Claus Peter

                    1. also zunächst einma folgendes: Nachdem ich auf eindringlichen Rat zuerst alles in eine Variable geschrieben und dann zusammen ausgegeben habe, funktionierts auch mit IE! Das bestätigt indirekt die Vermutung, dass hier das Timing Probleme bereitet. Die Abarbeitung des Write() aus einer Variablen heraus läuft halt anders.

                      Aber das ist doch dann schon mal ein Ergebniss :-)

                      Vermutlich passiert etwas in den ganzen Libaries irgendwas zur Laufzeit, was den IE aus den Tritt bringt.

                      @Struppi(1): Die Wiederholung der Script-Includierungen ist für das PopUp. Sonst können die Scripte nicht aus dem PopUp heraus aufgerufen werden.

                      theoretisch ja schon (opener).

                      @Struppi(2): Ich habs jetzt mit beiden Varianten ausprobiert. Mal mit " als Delimiter und mal mit '. Es macht keinen Unterschied. Naja, ok, einfacher ists mit '! Werde dies zukünftig auch so durchhalten. Deine Browserweiche- und Mauspositionstips werde ich noch ausprobieren, ich bin erstmal froh, dass die Mühle läuft.....

                      Das ist in erster Linie auch nur kosmetisch. bzw, du kannst, wenn du dir  mal den ganzen Schmodder ausgeben läßt (open('text/plain') allerdings nur im MZ) leichter Fehler finden (in Fehler finden bin ich gut mach selber ein Haufen ;-) )

                      @Struppi(3): Naja, die ganze Seite habe ich in der Tat nicht gepostet, schon die abgespeckte Version hat ja zu Protesten geführt. Der gepostete Quelltext hat allerdings (auf dem Server, nicht lokal) bei mir immer den Fehler gezeigt. Der Inhalt der JS-Includes ist nicht weltbewegend. Letztendlich hätte es nur zu Verwirrung geführt, wenn ich das auch noch gepostet hätte.

                      Letztendlich schon, aber man hätte (in einer Testumgebung) dann vielleicht auch mal dort nach Fehlern oder was auch immer gucken können. Es ist auf jeden Fall nicht unrelevant für dein Problem, da es ja an sich geht.

                      @Struppi(4): Aufgrund Deines Hinweises hab ichs jetzt noch mal mit einem einzelnen JavaScript-Include ausprobiert, bestehend aus einer einzigen Funktion mit einer Zeile. Es ändert nichts am Ergebnis: Der IE mags nicht, wenn er den Inhalt des PopUp nicht am Stück serviert bekommt.

                      Was passiert, wenn du mal einzelene Includes auskommentierst? Viellecht ist doch da irgendwo der Wurm.

                      Struppi.

                      1. Hi Struppi,

                        Was passiert, wenn du mal einzelene Includes auskommentierst? Viellecht ist doch da irgendwo der Wurm.

                        neeh, es reicht ein einzelnes Include, sogar auf eine Bibliothek im gleichen Verzeichnis. Werde mal sehen, dass ich die Seite im Ganzen morgen zum Laufen kriege.

                        Gruss

                        Claus Peter

                      2. Hi Struppi,

                        habe nochmal die URI-Angabe bei window.open() getestet.
                        window.open(""\about:blank"", .... ist mist, OK.
                        Aber mit window.open('about:blank', ....  kann Opera auch nichts anfangen.

                        Also bleibts bei window.open("", ...

                        Noch mal zu Deiner Mauspositionierung:
                        Sowohl IE6 als auch Opera 7.11 als auch Mozilla 1.4 laufen durch den

                        if(typeof document.documentElement != 'undefined')
                          {
                              // IE 6
                              pos.left += document.documentElement.scrollLeft;
                              pos.top += document.documentElement.scrollTop;
                          }

                        Zweig. Nur, mit Ausnahme des Opera sind beide Werte immer 0.
                        Ja, ich habe das Fenster kleiner gemacht und gescrollt. Hilft nichts.
                        Worin liegt dann der Sinn dieser Schleife?

                        Viele Grüsse

                        Claus Peter

                        1. Zweig. Nur, mit Ausnahme des Opera sind beide Werte immer 0.
                          Ja, ich habe das Fenster kleiner gemacht und gescrollt. Hilft nichts.
                          Worin liegt dann der Sinn dieser Schleife?

                          Der IE 6 rückt nur so im strict Modus die scrollwerte raus.

                          Struppi.

                2. Vielen Dank noch mal an dieser Stelle für Eure Hilfe. Die Hinweise haben mir sehr geholfen.

                  Trotz daß du alle Tipps von mir ignoriert hast, hab ich das Skript mal getestet und es läuft bei mir im IE 6, bis auf die Fehler, die ich dir auch schon im 1. Posting gesagt hatte.

                  _WindowChoice_=window.open(""about:blank"","List","width=300, height=50, scrollbars=no");

                  Hier zeigen mir sowohl der IE als auch MZ einen Fehler an "about:blank" kann nicht angezeigt werden. Da dürfen keine Anführungszeichen drumherum.

                  Ich vermute mal, das das was du uns zeigst nicht das ist womit du arbeitest, insofern läßt sich dir eigenlich nicht helfen.

                  Dynamsich externe Skripte einbinden klappt eigenlich in allen Browsern, lediglich die 3'er Version von Netscape hatte einige Probleme damit und der 4'er IE, wie erwähnt, mit Stylesheets. Das heißt, wenn du alle Tipps berücksichtigen würdest und uns mal zeigen was du wirklich machst, könnte dir vermutlich durchaus geholfen werden.

                  Struppi.

                  1. P.S.: der Quellttext, so wie wir in bisher gesehen haben nützt natürlich ebenfalls nix, weil wir ja nicht die externen Skripte haben. Insofern kan wirklich nur eine Testseite uns helfen dir zu helfen.

                    Struppi.

                  2. Hier zeigen mir sowohl der IE als auch MZ einen Fehler an "about:blank" kann nicht angezeigt werden. Da dürfen keine Anführungszeichen drumherum.

                    Hi, Struppi !
                    about:blank ist eh Käse. Zwei "" erfüllen den gleichen Zweck !!
                    So wird's jedenfalls in der einschlägigen Literatur gehandhabt !
                    Die Sache mit Skript per Skript erzeugen werd' ich aber mal weiterverfolgen und ob das überhaupt durchführbar ist ein Skript per document.write zu schreiben und gleichzeitig per Eventhandler onload ausführen zu lassen !?
                    Läßt sich sowas endlos weiterführen ??
                    Sozusagen Skript per Skript per Skript :o)
                    Bis denne !!

                  3. Hi Struppi,

                    grade ist mir wieder eingefallen, weshalb ich das "about:blank" nochmal "" gesetzt habe. Ohne die mags Opera 7.11 nähmlich gar nicht. Murmelt irgendwas von Zugriff auf schreibgeschützte Variable....

                    Im Forum gibts dazu viele Meinungen, ob mit oder ohne about:blank, einfach nur "".......

                    Gruss

                    Claus Peter

                    1. Im Forum gibts dazu viele Meinungen, ob mit oder ohne about:blank, einfach nur "".......

                      echt?

                      eigentlich heißt es about:blank kannste mal im Browser eintippen, allerdings gibt es 2 Ausnahmen, einmal Opera der daraus eine Fremde Domain macht und der IE 3 der die "URL" nicht kennt. alle Anderen kennen "about:blank" nicht. Wenn dir der IE 3 egal ist nimm ''.

                      Struppi.

                3. "</html>\r\n");
                        close();
                        }
                        _WindowChoice_.focus();

                  Frage : Was soll close() eigentlich bewirken !?
                  Schließt das nicht das fenster das gerade geöffnte wurde ??
                  Ciao !!

                  1. "</html>\r\n");
                          close();
                          }
                          _WindowChoice_.focus();

                    Frage : Was soll close() eigentlich bewirken !?
                    Schließt das nicht das fenster das gerade geöffnte wurde ??

                    Nein, das beendet die Ausgabe des Dokumentes, da es innerhalb des with Blockes ist, bezieht es sich auf document und nicht window.

                    http://selfhtml.teamone.de/javascript/objekte/document.htm#close

                    Struppi.

                    1. Nein, das beendet die Ausgabe des Dokumentes, da es innerhalb des with Blockes ist, bezieht es sich auf document und nicht window.

                      http://selfhtml.teamone.de/javascript/objekte/document.htm#close

                      Jauh!
                      window.document.close() : Ende Dokument
                      window.close() : Ende Fenster
                      Hmmm !
                      Aber natürlich hast du recht. Solange nicht klar ist was in seinen js-Dateien drin ist, können wir hier lange rätseln :
                      Hab ihm ja gesacht er soll's mal ins Netz stellen !
                      Tja...

  2. Hi,

    hast Du das alles selbst programmiert? Die Funktionen sind okay aber bei diesen write-Geschichten können sich schnell Fehler einschleichen. Die vielen Escape-Sequenzen machen es ziemlich undurchsichtig und sind bestimmt mit einem Tool generiert. Es geht an vielen Stellen auch transparenter. Statt

    "  <script language="JavaScript" src="../../../admin/jscript/common.js" type="text/javascript"></script>\r\n" +

    kannst Du es so schreiben:

    '  <script language="JavaScript" src="../../../admin/jscript/common.js" type="text/javascript"></script>' +"\r\n" +

    Zum Fehler selbst kann ich leider keine Aussage machen.

    1. Die vielen Escape-Sequenzen machen es ziemlich undurchsichtig und sind bestimmt mit einem Tool generiert. Es geht an vielen Stellen auch transparenter.

      Jo !!
      Erst mal das ganze Backslash-Gewitter beseitigen, wah, wo's nicht unbedingt nötig ist, bzw statt " der Übersichtlichkeit halber erstmal einfache Anführungszeichen verwenden !
      \n\r hast du von Php mitgebracht und wird in Javascript nur in Dialogboxen verwendet. Rausschmeißen !
      Der Browser-switch sieht mir auch nicht vertrauenserweckend aus.
      Was sollen die zwei !! eigentlich bewirken !?
      Am Besten ist immer ein Link zur Page, wo man sich das alles, einschließlich  der externen Skripte, mal anschauen und testen kann !
      Der gepostete Code öffnet bei mir ein leeres Dokument !
      Jetzt mach die Sache erst mal clean, wah !
      :o)

  3. Offenbar versucht der IE dabei, den Inhalt der aufrufenden HTML-Seite im PopUp darzustellen. Nach meinen letzten Erkenntnissen liegts an der Einbindung externer JavaScript Dateien in dem PopUp (die Pfade stimmen). Wenn ich die 3 Zeilen mit den externen JavaScript Referenzen weglasse, funzt es. Es geht auch, wenn ich open() und close() weglasse und alles in einem write() Befehl schreibe, nur dann mags Mozilla nicht mehr. Letztendlich traue ich dieser Lösung aber nicht so richtig über den Weg.

    Mit externen Skripten hatte ich bisher keine Probleme, aber der IE 4 hatte z.b. Probleme mit externen Stylesheets und stürzte ab, wenn man diese nicht per HTTP eingebunden hatte.

    open und close solltest du bzw. darfst du nicht weglassen, aber was immer sinnvoll ist, die Ausgabe in einer Variabel zu sammeln und dann auf einmal ausgeben. Das geht schneller und hat den Vorteil, dass du dir den Inhalt zu debug Zwecken leichter ausgeben lassen kannst.

    (zumindest in Mozilla lässt sich dieses leicht mit open('text/plain') bewerkstelligen im IE muss man allerdings die HTML Tags maskieren [zumindest war das bisher so aber vielleicht ignoriert der IE ja mittlerweile nicht mehr den Mime-Type?])

    Hier mal zur Erläuterung der Quelltext:

    jaja, wie schon erwähnt, ein gekürztes Beispiel wäre besser gewesen. Schließlich erwartest du von uns, dass wir uns das anschauen und verstehen.

    <script language="JavaScript" src="../../../tliste/jscript/common.js" type="text/javascript"></script>
      <script language="JavaScript" src="../../../tliste/jscript/strstr.js" type="text/javascript"></script>
      <script language="JavaScript" src="../../../tliste/jscript/reqparam.js" type="text/javascript"></script>
      <script language="JavaScript" src="../../../tliste/jscript/jserror.js" type="text/javascript"></script>
      <script language="JavaScript" src="../../jscript/common.js" type="text/javascript"></script>

    Ich geh mal davon aus, dass die ganzen Libaries Fehlerfrei sind und Problemlos ablaufen.

    <script language="JavaScript" type="text/javascript">
      <!--

    Ich frag mich immer wieder, warum bei Seiten, die ganz offensichtlich nicht in alten Browsern laufen können, auf Uralt Browser hier an dieser Stelle soviel Wert gelegt wird.

    Sowohl language als auch der HTML Kommentar, werden von Browsern benötigt, die mit Sicherheit auf deinen Seiten nichts mehr anfangen können.

    // browser switch

    Der was bewirken soll?

    var nc  = !!(document.captureEvents && !document.documentElement);
        var ie  = !!document.all;
        var ie4 = !!(!document.documentElement && document.all);
        var dom = !!document.documentElement;
        // var dom = !!document.getElementById;
        var dom2 = !!(dom && document.implementation && document.implementation.hasFeature("MouseEvents", "2.0"))
        var nc6 = !!(dom && (!document.all));
        var mac = !!(navigator.userAgent.indexOf("Mac")!=-1);

    Die 2 Ausfrufezeichen heißen: not not, oder?
    sollen vermutlich bewirken, dass in den Variabeln ein bool'scher Wert steht.

    [....]

    // internal options list
          var IntOptList = (
          "  <select class="FormFieldList" name="LIST" size="1" onChange="javascript:CopyKeyInfo(pszDestName)">\r\n" +
          "    <option value="">Liste interner Teilnehmer</option>\r\n" +
          "    <option value="11">11 - Analog11</option>\r\n" +
          "    <option value="12">12 - Analog12</option>\r\n" +
          "    <option value="13">13 - Analog13</option>\r\n" +
          "    <option value="14">14 - Analog14</option>\r\n" +
          "    <option value="15">15 - Analog15</option>\r\n" +
          "    <option value="16">16 - Analog16</option>\r\n" +
          "    <option value="17">17 - Analog17</option>\r\n" +
          "    <option value="20">20 - ISDN20</option>\r\n" +
          "    <option value="21">21 - ISDN21</option>\r\n" +
          "    <option value="30">30 - ISDN30</option>\r\n" +
          "    <option value="31">31 - ISDN31</option>\r\n" +
          "    <option value="40">40 - ISDN40</option>\r\n" +
          "    <option value="41">41 - ISDN41</option>\r\n" +
          "  </select>\r\n");

    Wie schon von anderer Seite erwähnt, kannst du dir diese Maskierungen sparen, wenn du einfache Anführungszeichen verwendest, daneben ist das Label 'javascript:' in einem Eventhandler (onchange) überflüssig.

    if(!dom2 || ie)
          {
            iXPos = ie? window.event.clientX : (nc? window.event.screenX : (screen.width/2)-150);
            iYPos = ie? window.event.clientY : (nc? window.event.screenY : (screen.height/2)-25);
          }
          if(nc6)
          {
            iXPos -= 250;
            iYPos -= 200;
          }
          else
          {
            iXPos -= 125;
          }

    Hier z.b. versteh ich nicht den zusammenhang zwischen dom2, ie, nc, nc6 und den Schlußfolgerungen die du ziehst.

    Da du anscheinend einen Event abfangen willst, brauchst du lediglich die beiden dem zugrunde liegenden Modelle abzufragen. Der IE verwendet eine globales Objekt für die Eigenschaften und NC/MZ  übergibt diesen an die Funktion als Parameter.

    Um z.b. die Mausposition bei einem Event raus zu bekommen verwende ich folgende Funktion:

    function _mouse_pos(evt)
    {
        if(!evt) return evt = window.Event;
        var pos = = {left:0,top:0};
        pos.left = evt.pageX ? evt.pageX : evt.clientX;
        pos.top = evt.pageY ? evt.pageY : evt.clientY;

    // Der IE braucht Sonderbehandlung
        if(typeof document.documentElement != 'undefined')
        {
            // IE 6
            pos.left += document.documentElement.scrollLeft;
            pos.top += document.documentElement.scrollTop;
        }
        else if (document.body)
        {
            // IE 4
            pos.left += document.body.scrollLeft;
            pos.top  += document.body.scrollTop;
        }
        return pos;
    }

    Damit hast du dann die Position im Dokument.

    _WindowChoice_=window.open(""about:blank"","List","width=300, height=50, left=" + iXPos +", top=" + iYPos +"scrollbars=no");

    hier sind mir die Maskierungen unklar warum müssen um about:blank Anführungszeichen?

    unglücklicherweise funktioniert das mit Opera nicht, da du dann keinen Zugriff mehr auf das Fenster hast. Du kannst als ersten Parameter einfach einen Leerstring benutzen (Das wirft allerdings im IE 3 einen Fehler)

    [ write ]

    Hier würde ich wie gesagt, entweder alles erst in einer Variabel speichern oder einfach nur einen write Befehl nutzen.

    Damit liesse sich leichter experimentieren, da du bei den ganzen Backslash Maskierungen schnell die Kontrolle verlierst, was wirklich im Broser ankommt.

    Struppi.