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.