Merkwürdiges Scriptverhalten...
Max Budde
- javascript
Hallo. Ich habe auf meiner Seite folgendes Script in einer Extra-datei eingebunden:
function UserProfil(Vorname,Nachname,Nick,Geb,Schule,Mail,ICQ,Pic)
{
var jetzt = new Date();
var Jahr = jetzt.getFullYear();
var Alter = Jahr - Geb;
with(this.document)
{
close();
open("text/html");
//STYLES ANFANG
write('<html><head><title>Userliste</title></head><BODY BGCOLOR="#4A4A4A" TEXT="#FF9900" LINK="#FFE400" ALINK="#FFE400" VLINK="#FFE400"><center>');
//STYLES ENDE
//USER PROFIL
write('<table border="1" align="left" width="40%">');
write('<TH colspan="2">Allgemeine Angaben</TH>');
write('<TR>');
write('<TD><b>User:</b></TD>');
write('<TD>' + Vorname + ' ' + Nachname + '</TD>');
write('<TR>');
write('<TD><b>Nickname:</b></TD>');
write('<TD>' + Nick + '</TD>');
write('<TR>');
write('<TD><b>Alter:</b></TD>');
write('<TD>' + Alter + ' (' + Geb + ')' + '</TD>');
write('<TR>')
write('<TD><b>Schule:</b></TD>');
write('<TD>' + Schule + '</TD>');
write('<TR>');
write('<TD><b>Mail:</b></TD>');
write('<TD><a href="mailto:' + Mail + '">' + Mail + '</a>' + '</TD>');
write('<TR>');
write('<TD><b>ICQ (Status/Add):</b></TD>');
write('<TD><a href="http://wwp.mirabilis.com/scripts/Search.dll?to=' + ICQ + '"><img src="http://wwp.icq.com/scripts/online.dll?icq=' + ICQ + '&img=1" border=0></a></TD>');
write('<TR align="center">')
write('<TD align="center" colspan="2"><a href="javascript:history.back();"><img src="pics/pfeillinksan.gif" border="0"></a></TD>');
write('</table>');
//ICQ-Messaging
write('<form action="http://wwp.icq.com/scripts/WWPMsg.dll" method="post">');
write('<table border="1" align="center" width="40%">');
write('<TR ALIGN="left" VALIGN="middle">');
write('<TH colspan="2" align="center">ICQ-Message an ' + Vorname +' schreiben</TH>');
write('<TR ALIGN="center" VALIGN="middle">');
write('<TD>Dein Name: <input type="text" name="from" value="" size=15 maxlength=40 onfocus="this.select()"></TD>');
write('<TD>Deine E-Mail: <input type="text" name="fromemail" value="" size=15 maxlength=40 onfocus="this.select()"></TD>');
write('<input type="hidden" name="subject" value="Ein User von Mastershrimp.com schreibt dir:">');
write('<TR ALIGN="center" VALIGN="middle">');
write('<TD colspan="2">Deine Message:<br><textarea name="body" rows="3" cols="30" wrap="Virtual"></textarea></TD>');
write('<TR ALIGN="center" VALIGN="middle"><TD colspan="2">');
write('<input type="hidden" name="to" value="' + ICQ + '">');
write('<input type="submit" name="Send" value="Send Message"> ');
write('<input type="reset" value="Clear"><br>');
write('<a href="http://www.icq.com/legal/"><font size="1">Terms of Service</font></a>');
write('<br><a href="http://www.icq.com/public/panels/messagepanel/links/messagepanel.html"><font size="1">This site is powered by the ICQ Online-Message Panel</font></a></TD></TABLE>');
write('</form>');
}
//Bilder-Script
(Pic == 'noPic') ? KeinBild() : Bild();
function Bild()
{ document.write('<br><img src="pics/userpics/' + Vorname + Nachname + '.jpg"></body></html>'); }
function KeinBild()
{ document.write('<br><img src="pics/userpics/nopic.jpg"></body></html>'); }
}
Im HTML-Dokument, welches dieses Script benutzt habe ich einmal in den Header "<script src="user.js" language="Javascript"></script>" eingebunden und in den Body den Link, mit dem die Funktion für jeden User gestartet wird:
<a href="#" onClick="UserProfil('Vorname','Nachname','Alex','1980','Schul-Name','Email@Email.de','12345678','Pic')">Username <font face="Webdings">·</font></a>
Zu jedem User gibt es einen Link, der die entsprechenden Userinfos an das Script weitergibt. Die Links sind in einer <ul></ul>-List und die wiederum in einer Tabelle.
Wenn man jetzt auf einen Link klickt, wird eine neue Seite aufgebaut, die die Informationen über den User anzeigt.
Folgendes Problem: Bei mir (Win98;IE6) klappt alles wunderbar. Bei XP glaub ich auch. Nur der IE5 (in meiner schule) und der IE, der in Win2000 drin ist streiken irgendwie...Der IE5 läd die Startseite (also die mit den Links) einfach nochmal, nachdem er für 1 sek. die korrekte User-Info-Seite angezeigt hat.
Der IE bei Win2000 verabschiedet sich mit "Blablabla verursacht einen Fehler...usw."
Ich denke, dass da irgendein Befehl falsch geschrieben wurde. Kann mir jemand weiterhelfen? Würde es euch helfen, wenn ihr das ganze "vor Ort" - also auf meiner Seite sehen würdet?
Danke und Grüße
Max
Hi,
<a href="#" onClick="UserProfil('Vorname','Nachname','Alex','1980','Schul-Name','Email@Email.de','12345678','Pic')">Username <font face="Webdings">·</font></a>
<font> ist deprecated.
Was passiert, wenn man auf einen Link klickt?
1.) Das onClick-Event feuert. In einem eventuell vorhandenen Event-Handler enthaltene Scripts werden abgearbeitet.
2.) Anschließend(!) wird der Link ausgeführt, sofern man es nicht aktiv(!) verhindert.
Folgendes Problem: Bei mir (Win98;IE6) klappt alles wunderbar. Bei XP glaub ich auch.
Diese Browser verhalten sich falsch.
Nur der IE5 (in meiner schule) und der IE, der in Win2000 drin ist streiken irgendwie...Der IE5 läd die Startseite (also die mit den Links) einfach nochmal, nachdem er für 1 sek. die korrekte User-Info-Seite angezeigt hat.
Diese Browser verhalten sich korrekt.
Der IE bei Win2000 verabschiedet sich mit "Blablabla verursacht einen Fehler...usw."
Dieser Browser verhält sich krass.
Wie verhalten sich eigentlich nicht-IEs?
Ich denke, dass da irgendein Befehl falsch geschrieben wurde.
Nein, nur vergessen. Recherchiere im Archiv, wie aus einem Event-Handler heraus die eigentliche mit dem Ereignis verknüpfte Aktion unterbunden wird.
Cheatah
Nein, nur vergessen. Recherchiere im Archiv, wie aus einem Event-Handler heraus die eigentliche mit dem Ereignis verknüpfte Aktion unterbunden wird.
Danke erstmal. Hat mir schon etwas weitergeholfen. Eine Frage: Warum soll die Aktion (das Aufrufen der Funktion Userprofil() ) unterbunden werden? Ich will die doch benutzen!?!?! Sorry für diese Frage, aber ich bin noch ziemlich unerfahren auf dem Gebiet Javascript.
MfG
Max
Hi,
Warum soll die Aktion (das Aufrufen der Funktion Userprofil() ) unterbunden werden?
üblicherweise bewirkt ein Klick auf einen Link, dass zu dem Linkziel weitergeleitet wird. _Das_ willst Du verhindern, nicht die Ausführung eines zusätzlichen(!) Scripts.
Cheatah
Ok, hab jetzt folgende Vorschläge im Archiv gefunden:
Beide Lösungen erscheinen mir nach deiner Fehleranalyse plausibel. Ich habe mal 1) ausprobiert - bei mir klappts. Ok, das heißt nichts, aber ich werde mal ein paar Freunde als Tester "aktivieren".
Vielen Dank! Hast mir echt geholfen!
MfG
Max
Hi,
Ok, hab jetzt folgende Vorschläge im Archiv gefunden:
gratuliere :-)
- <a href="#" onClick="Userprofil(...);return false">...</a>
Ja. Bzw. jein.
- <a href="javascript:Userprofil(...)">...</a>
Nein.
Beide Varianten ignorieren die Tatsache, dass JavaScript nicht vorausgesetzt werden darf. Die zweite ist zwar im Prinzip ebenfalls richtig; ich habe jedoch eine persönliche Abneigung gegen "javascript:"-URLs, weil sie JavaScript-freie Alternativen ausschließen.
Ich habe mal 1) ausprobiert - bei mir klappts. Ok, das heißt nichts,
Gut, dass Dir diese Tatsache bewusst ist. Das "return false;" am Ende des Event-Handlers jedoch ist es, das die Ausführung der eigentlichen mit dem Ereignis verbundenen Aktion verhindert.
Cheatah
Ok, kurzer Report:
Die erste Möglichkeit läuft bei nem Win2000-IE nur teilweise...Ein Freund meinte, dass der Fehler ab und zu noch auftaucht. Und zwar wird er in der MSHTML.dll oder so lokalisiert.
Aber immerhin klappts schon manchmal...
Die zweite Lösung klappt bei mir nicht. Find ich zwar komisch, da diese Sachen immer klappten, hier der Link-Code. Vielleicht hab ich was übersehen:
<a href="javascript:UserProfil('Vorname','Nachname','Nickname','1980','Schule','Email@email.de','112334543','noPic')">Username</a>
sieht für mich richtig aus. Allerdings passiert gar nix, wenn ich draufklicke. Auch kein Fehler.
Da ich die Aktion aber mit der anderen Lösung unterbunden habe, müsste es doch eigentlich überall wo js aktiviert ist, klappen, oder?
MfG
Hi,
Die erste Möglichkeit läuft bei nem Win2000-IE nur teilweise...Ein Freund meinte, dass der Fehler ab und zu noch auftaucht. Und zwar wird er in der MSHTML.dll oder so lokalisiert.
Aber immerhin klappts schon manchmal...
äh? Oh. Ich würde sagen, sein Browser ist defekt. Da es sich um Microsoft-Programme handelt, schlage ich eine Neuinstallation seines Systems vor.
Die zweite Lösung klappt bei mir nicht.
Auch erstaunlich.
sieht für mich richtig aus. Allerdings passiert gar nix, wenn ich draufklicke. Auch kein Fehler.
JavaScript deaktiviert?
Da ich die Aktion aber mit der anderen Lösung unterbunden habe, müsste es doch eigentlich überall wo js aktiviert ist, klappen, oder?
Eigentlich ja. Wohlgemerkt kann man in modernen Browsern JavaScript _sehr_ selektiv (de-)aktivieren.
Cheatah
JavaScript deaktiviert?
Mhh. Denke nicht. Sonst könnte ich ja auch nicht das "onclick...return false" anzeigen, oder?
Hm. Aber du würdest jetzt sagen, dass alles richtig ist? Oder gibts da noch kleinere Bugs?
Was war jetzt z.B. mit <font>? Welche möglichkeit soll ich sonst nehmen? CSS? Muss doch auch mit rein-HTML gehen.
Habe grade die Nachricht bekommen, dass der Fehler nicht mehr auftritt!! Danke! Mission geglückt!!
Ich hoffe dass das reicht! Habs auf den IE5 nicht getestet.
Nochmal "Danke"
Hi,
Hm. Aber du würdest jetzt sagen, dass alles richtig ist? Oder gibts da noch kleinere Bugs?
das Prinzip ist simpel und kaum fehlerträchtig. Und es funktioniert ja jetzt :-)
Was war jetzt z.B. mit <font>? Welche möglichkeit soll ich sonst nehmen? CSS? Muss doch auch mit rein-HTML gehen.
CSS ist richtig. HTML ist nicht mehr als eine Strukturbeschreibungssprache und war _nie_ dazu gedacht, irgendwelche Darstellungsempfehlungen zu transportieren. Als es nur sehr wenige derartige Anforderungen gab, hat man schulterzuckend solch simple Dinge wie <center> oder <font> toleriert[1], die aber mehr und mehr ge- bzw. eigentlich missbraucht wurden, bis hin zu solch hirnverbrannten Dingen wie Pixelgenauigkeit. Aufgrund solcher Anforderungen wurde dann CSS entwickelt, wodurch all dieser Unfug wie <font> endgültig und glücklicherweise vernichtet werden kann.
HTML und CSS bilden eine Einheit. Du darfst eine CSS-Lösung gerne als "rein-HTML" ansehen.
Cheatah
[1] Hierbei spielen die Browserhersteller keine untergeordnete Rolle, die sich nämlich gegenseitig mit neuem Unfug wie <blink>, <marquee> oder Frames übertrumpfen wollten. All dies ist nicht wirklich Teil von HTML - das W3C hat weitaus bessere Konzepte entwickelt. Selbst <b> ist eigentlich Unfug, aber "dummerweise" in der Praxis äußerst vorteilhaft.
Hi. Hatte noch eine Frage:
Was heißt "<font> ist deprecated." ?
Meinst du mit "2.) Anschließend(!) wird der Link ausgeführt, sofern man es nicht aktiv(!) verhindert." das Ausführen des "href=#" ? Kann man das nicht einfach weglassen, und nur ein <a onclick="blabla...">... stehen lassen?
Oder verstehe ich da etwas grundsätzlich falsch? Ich werde mal auf die Suche nach dem Unterbinde-Dingen gehen...so long.
MfG
Max
Hi,
Was heißt "<font> ist deprecated." ?
das HTML-Element <font> wurde als sinnfrei erkannt, wird derzeit lediglich toleriert und ist in zukünftigen HTML-Versionen nicht mehr existent. Der kompromisslose Verzicht darauf ist absolut anzustreben.
Meinst du mit "2.) Anschließend(!) wird der Link ausgeführt, sofern man es nicht aktiv(!) verhindert." das Ausführen des "href=#" ?
Korrekt.
Kann man das nicht einfach weglassen, und nur ein <a onclick="blabla...">... stehen lassen?
Nicht wirklich. Das ist nur zufällig gültig, weil auch <a name> existiert (andernfalls wäre href ein Pflicht-Attribut), und je nach Browser funktioniert es auch.
Oder verstehe ich da etwas grundsätzlich falsch?
Innerhalb des Event-Handlers kannst Du das Folgen des Links verhindern.
Cheatah
Innerhalb des Event-Handlers kannst Du das Folgen des Links verhindern.
Und zwar mit
return false
Oder?
Peter
Hi,
Innerhalb des Event-Handlers kannst Du das Folgen des Links verhindern.
Und zwar mit
return false
Oder?
siehe hierzu weitere Artikel dieses Threads.
Cheatah
with(this.document)
{
close();
open("text/html");
Ohne mir den Wust näher angesehen zu haben, ist mir neu, dass man, um ein Dokument zu öffnen, es vorher schließt.
open();
write();
close();
Wobei ersteres auch weggelassen werden kann, vom anderen die Reihenfolge aber kaum veränderbar sein dürfte.
Jaoa
Hi,
Ohne mir den Wust näher angesehen zu haben, ist mir neu, dass man, um ein Dokument zu öffnen, es vorher schließt.
warum nicht? Das Schließen des aktuellen Dokuments könnte noch nicht stattgefunden haben.
Cheatah
Ohne mir den Wust näher angesehen zu haben, ist mir neu, dass man, um ein Dokument zu öffnen, es vorher schließt.
Nein, das ist so richtig. Siehe: http://selfhtml.teamone.de/javascript/sprache/variablen.htm zweites beispiel.
MfG
Hi,
Siehe: http://selfhtml.teamone.de/javascript/sprache/variablen.htm
(psst! </faq/#Q-19> ;-)
Cheatah
Nein, das ist so richtig. Siehe: http://selfhtml.teamone.de/javascript/sprache/variablen.htm zweites beispiel.
Is ein Fehler in eurer Bibel. Tja, das kann passieren, wenn man an Verbalinspiration eines Gurus. glaubt.
Is ein Fehler in eurer Bibel.
Wie ist es denn richtig??
Erst wird das letzte Doc geschlossen, dann ein neues geöffnet. Wenn man das dann wieder mit close() beendet wird das fenster leer und weiß!