Probleme beim Funktionsaufruf mit IE
Bernhard Peissl
- javascript
0 Cheatah
Hallo
Ich habe eine JS Datei extern eingebunden, und darin befindet sich die Funktion showIntro() der eine Variable übergeben wird.
Der Aufruf in der HTML-Datei sieht folgendermassen aus:
// <body onload="javascript: showIntro('fac');">
'fac' ist die Abkürzung von faculty, und hilft mir dabei, die zugehörigen gifs für dieses Intro zu suchen. Die haben nämlich Dateinamen wie intro_fac_foto.jpg oder intro_deg_foto.jpg.
Wenn ich keine Variable übergebe, die Funktion also mit void aufrufe klappt alles. Nur wenn ich das Argument reinschreibe regt sich der IE auf: Objekt erwartet !! :-(
NS macht ausnahmsweise ;-) alles wunderbar !
Das sind so die Dinge, die mich echt aufregen, weil wahrscheinlich wieder nur irgendwo ein Leerzeichen hingehört, oder doppelte statt einfachen Gänsefüsschen, also bitte habt Mitleid und helft mir !
Schöne Grüsse,
Bernhard
Hi,
// <body onload="javascript: showIntro('fac');">
das ist so grottenflashc. onLoad enthält per definitionem einen JavaScript-Aufruf; und wenn dieser "javascript:" lautet, dann versucht JavaScript, eben dies zu interpretieren, was natürlich nicht klappt.
Ich nehme zwar ehrlich gesagt nicht an, daß das die Ursache für die Fehlermeldung ist, aber die dürfte im Quellcode der Funktion stecken. Bitte gib uns doch ein paar Zeilen desselben, wo das Problem Deiner Meinung nach auftaucht.
Cheatah
Hallo Cheatah
Du schmeisst das Forum derzeit ja fast im Alleingang ;-)
das ist so grottenflashc. onLoad enthält per definitionem einen
JavaScript-Aufruf; und wenn dieser "javascript:" lautet, dann
versucht JavaScript, eben dies zu interpretieren, was natürlich
nicht klappt.
Daran liegts nicht. Bei den anderen Dateien funktionierts wunderbar!
Ich hab mir das einfach so angewöhnt, weil der IE oft spinnt, wenn
ich eine JS-Funktion aufrufe, drum schreib ich immer javascript:
davor. Hatte da noch nie Probleme! Aber du hast ja recht, schöner
Programmierstil isses nicht!
Hier der Code:
function showIntro(bereich) {
var introWin = window.open("","","height=500,width=437");
with(introWin.document) {
open();
write("<html><head><title>"+titel[bereich]+"</title>\n<style>\n");
write("img { margin: 0px; }\n");
write("a:link { color: "+color[bereich]+"; text-decoration: none; }\n");
write("a:hover { text-decoration: underline; }\n");
write("a.cal:link { color: black; text-decoration: underline; }\n");
write("a.cal:hover{ color: black; text-decoration: none; }\n");
write("a.cal:visited { color: black; text-decoration: underline; }\n");
write(".divlinks { position: absolute; left: 0px; top: 0px; width: 118px; height: 500px; z-index: 1; }\n");
write(".divrechts { position: absolute; left: 118px; top: 0px; width: 319px; height: 500px; z-index: 1; }\n");
write(".divtitel { position: absolute; left: 130px; top: 380px; width: 300px; height: 30px; z-index: 2; }\n");
write(".divfoto { position: absolute; left: 337px; top: 20px; width: 100px; height: 143px; z-index: 2; }\n");
write(".divspruch { position: absolute; left: 137px; top: 163px; width: 200px; height: 300px; z-index: 1; }\n");
write(".divclose { position: absolute; left: 370px; top: 470px; width: 60px; height: 30px; z-index: 2; }\n");
write("p.titel { font-family: Arial; font-size: 24px; font-weight: bold; }\n");
write("p.spruch { font-family: Arial; font-size: 10px; font-weight: bold; }\n");
write("p.cal { font-family: Arial; font-size: 10px; font-weight: bold; }\n");
write("p.raus { font-family: Arial; font-size: 12px; font-weight: bold; color: "+color[bereich]+"; }\n");
write("</style></head>\n");
write("<body><div class='divlinks'>\n");
write("<img src='gifs/intro_"+bereich+"_fay.jpg' alt='Maitre Leherb (1933-1997), Australia' width='118' height='500' border='0'></div>\n");
write("<div class='divrechts' name='background'>\n");
write("<img src='gifs/intro_"+bereich+"_bg.jpg' width='319' height='500' border='0'></div>\n");
// für den calender und registration gibt's keine Fotos
if (bereich!='reg' && bereich!='cal') {
write("<div class='divfoto' name='foto'>\n");
write("<img src='gifs/intro_"+bereich+"_foto.jpg' width='100' height='143' border='0'></div>\n");
}
write("<div class='divspruch' name='spruch'>\n");
write("<p class='spruch' align='right'>"+text[bereich]+"</p></div>\n");
write("<div class='divtitel' name='titel'>\n");
write("<p class='titel' align='left'>"+titel[bereich]+"</p></div>\n");
write("<div class='divclose'><p class='raus'><a href='javascript: parent.close();'>[close]</a></p></div>\n");
write("</body></html>");
close();
}
}
Danke,
Bernhard
Hi,
Du schmeisst das Forum derzeit ja fast im Alleingang ;-)
ja, ich muß meinen Wurfarm trainieren ;-)
Daran liegts nicht. Bei den anderen Dateien funktionierts wunderbar!
Ist trotzdem falsch.
Hatte da noch nie Probleme! Aber du hast ja recht, schöner
Programmierstil isses nicht!
Nicht nur das; es erfordert eine Fehlertoleranz, die Du nicht bei jedem Browser erwarten darfst.
function showIntro(bereich) {
var introWin = window.open("","","height=500,width=437");
window.open() ohne eine URL dürfte auch nur selten funktionieren. Benutze wenigstens "about:blank".
with(introWin.document) {
open();
Hier kannst Du auch nicht sicher sein, daß das richtige open() genommen wird. Soweit ich weiß, steht der with-Kontext in der Prioritätenliste sogar recht weit unten.
write("<html><head><title>"+titel[bereich]+"</title>\n<style>\n");
Schreibe statt dessen z.B.
var d = introWin.document;
d.open();
d.write(...);
usw.
write("img { margin: 0px; }\n");
Naja, ein wenig kürzen hättest Du schon können... :-/
Cheatah
Hallo Cheatah
Ich hab den kleinen Teufel gefunden, und weisst du was es war, nicht ein fehlendes Leerzeichen oder ein falsches Gänsefüsschen, nein viel subtiler, <schimpf target="JavasSript">ein Slash zuviel !</schimpf>
// <script language="JavaScript" src="/intro.js"></script>
Ich hab die Datei mit "/intro.js" statt mit "intro.js" eingebunden.
Da kann man sich echt grün und blau ärgern! Aaaaarrrrgghhhhhh!!!!!
<zaehneknirschen />
Mich wunderts bloss, dass Netscape das geschluckt hat ;-)
Hatte da noch nie Probleme! Aber du hast ja recht, schöner
Programmierstil isses nicht!
Nicht nur das; es erfordert eine Fehlertoleranz, die Du nicht bei
jedem Browser erwarten darfst.
Jaja, weiss schon, Freund Netscape, drum lieb ich ihn ja so ;-(
function showIntro(bereich) {
var introWin = window.open("","","height=500,width=437");
window.open() ohne eine URL dürfte auch nur selten funktionieren.
Benutze wenigstens "about:blank".
Wieso, wenn nix drin steht wird ja per default ein about:blank aufgemacht, oder?
write("<html><head><title>"+titel[bereich]+"</title>\n<style>\n");
Schreibe statt dessen z.B.
var d = introWin.document;
d.open();
d.write(...);
Das issn guter Tip. Dieses Javascript, überhaupt diese ganzen
Scriptsprachen, da wundere ich mich jedesmal wieder, was da alles
geht [aber nur selten auch funktioniert ;-)] Da werden ganze Fenster
auf eine Variable zugewiesen, na wenn das nicht krank ist!
write("img { margin: 0px; }\n");
Naja, ein wenig kürzen hättest Du schon können... :-/
Sorry, tut mir leid !
Trotzdem danke für deine Mühe,
Bernhard
Hi,
// <script language="JavaScript" src="/intro.js"></script>
Ich hab die Datei mit "/intro.js" statt mit "intro.js" eingebunden.
Mich wunderts bloss, dass Netscape das geschluckt hat ;-)
daß Netscape und IE dies unterschiedlich interpretieren (Netscape AFAIK falsch), müßte im Archiv zu finden sein. Aber frag mich mal wo :-)
Nicht nur das; es erfordert eine Fehlertoleranz, die Du nicht bei
jedem Browser erwarten darfst.Jaja, weiss schon, Freund Netscape, drum lieb ich ihn ja so ;-(
Nein, von Netscape rede ich hier gar nicht mal. Es gibt noch mehr Browser neben Netscape und IE, die JavaScript verstehen (oder wenigstens vorgeben, dies zu tun). Opera beispielsweise.
Benutze wenigstens "about:blank".
Wieso, wenn nix drin steht wird ja per default ein about:blank aufgemacht, oder?
Nein.
var d = introWin.document;
Das issn guter Tip. Dieses Javascript, überhaupt diese ganzen
Scriptsprachen, da wundere ich mich jedesmal wieder, was da alles
geht [aber nur selten auch funktioniert ;-)] Da werden ganze Fenster
auf eine Variable zugewiesen, na wenn das nicht krank ist!
Das ist nicht krank, sondern objektorientiert :-)
Cheatah