Javascript in Javascript...
Flip
- javascript
Hallo,
ich habe ein Problem mit Netscape. Im folgenden Code schreibe ich mit document.write ein neues Dokument, daß wiederum Javascript enthält:
<html><head>
<title>blabla</title>
<script type="text/javascript">
<!--
function DokumentErstellen()
{
var text;
text='<html><head><title>blabla2</title>';
text=text + '<script type="text/javascript><!--';
text=text+'function klick() {';
text=text+'alert("Na sowas!!"); }';
text=text+"//--></script> ";
text=text+'</head>';
text=text+'<body>';
text=text+'<center><p><b><a href="javascript:klick()">Klick mich!</a></b></p>';
text=text+' </BODY>';
text=text+'</HTML>';
window.document.open();
window.document.clear();
window.document.write(text);
window.document.close();
}
//-->
</script> </head>
<body onLoad="DokumentErstellen();">
</BODY></HTML>
Betrachte ich nun den Quelltext des neuen Dokumentes, so wird bei Netscape merkwürdigerweise der gesamte Script-Bereich weggelassen. Die Alert-Meldung kommt also nicht. Bei IE ist der Javascript-Bereich im neuen Dokument aufgeführt, ich bekomme dort aber leider auch eine Fehlermeldung. Woran liegt's?
Ich benutze Netscape 4.7 und IE 6.0
Hallo
<script type="text/javascript">
Hier fehlt das zweite "
text=text+"//--></script> ";
mach hier mal aus den " jeweils ein '.
Philipp
Sorry, falsch zitiert ;)
text=text + '<script type="text/javascript><!--';
Hier meinte ich.
text=text + '<script type="text/javascript><!--';
Hier meinte ich.
Danke, ich hab's korrigiert, aber das löst mein Problem leider noch nicht. Weder im IE noch im Netscape funktioniert es...
Versuche mal: text=text + '<scr'+'ipt type="text/javascript><!--';
und auch: ..'</scri'+'pt>'..
Versuche mal: text=text + '<scr'+'ipt type="text/javascript><!--';
und auch: ..'</scri'+'pt>'..
Das ist eine gute Idee, vielen Dank! Ich hab's gerade ausprobiert - es funktioniert leider nicht! Folgenden Quelltext zeigt Netscape an:
<BASE HREF="file:/C/temp/">
<HTML><HEAD><TITLE>blabla2</TITLE> </HEAD>
<BODY>
<CENTER><P><B><A href="javascript:klick()">Klick mich!</A></B></P> </BODY></HTML>
Wie man sieht, fehlt der gesamte Script Bereich! Kann es sein, daß es schlichtweg nicht vorgesehen ist, daß man ein Dokument mit erneutem Javascript generiert?
Hallo Flip,
text='<html><head><title>blabla2</title>';
text=text + '<script type="text/javascript><!--';
Exakt hier solltest Du einen Zeilenumbruch erzwingen.
Vorschlag: Teile in 'text1' (der zu schreibende Quelltext inklusive dem oeffnenden HTML-Kommentartag) und 'text2' (der Rest).
Verwende dann document.writeln(text1), um den oben erwaehnten Zeilenumbruch zu erzielen.
Ach ja: Zur Verschachtelung von Zeichenketten schau mal hier: http://selfhtml.teamone.de/html/allgemein/zeichen.htm#html_eigene und hier: </archiv/2003/6/49735/#m272123>
gruesse
rainer groth
Hallo Rainer,
Hallo Flip,
text='<html><head><title>blabla2</title>';
text=text + '<script type="text/javascript><!--';Exakt hier solltest Du einen Zeilenumbruch erzwingen.
ich bin sichtlich geplättet! Du bist ein Genie!! Mit dem eingefügten Zeilenumbruch hat es tatsächlich funktioniert. Woran liegt das? Ich habe mich ziemlich lange damit rumgeärgert - wie kommt ein Normalsterblicher auf einen Zeilenumbruch an Stelle xy??
Das klingt genauso wie: "Fahren Sie den PC 3x hoch und runter, trinken Sie dabei eine Tasse Kaffee mit 2 Würfelzucker, rühren Sie um, zweimal links, einmal rechts, jetzt sollte es klappen!"
Vorschlag: Teile in 'text1' (der zu schreibende Quelltext inklusive dem oeffnenden HTML-Kommentartag) und 'text2' (der Rest).
Verwende dann document.writeln(text1), um den oben erwaehnten Zeilenumbruch zu erzielen.Ach ja: Zur Verschachtelung von Zeichenketten schau mal hier: http://selfhtml.teamone.de/html/allgemein/zeichen.htm#html_eigene und hier: </archiv/2003/6/49735/#m272123>
Die Geschichte über den kleinen ahnungslosen Browser war ganz interessant. Alle schimpfen sie nur auf den armen kleinen Browser - egal aus welchem Hause er stammt...
Ich hab da aber auch noch eine Frage. Um bei Deinem Beispiel zu bleiben: Könnte ich den Befehl auch so gestalten:
string1 = "<a href='test.html' target='neuesfenster' onclick='window.open("
string2 = "'','neuesfenster','top=200,screenX=50,left=350,screenY=300,height=263,width=350'"
string3 = ")'>hallo</a>";
document.write(string1 + string2 + string3);
Oder klatscht der kleine Browser nur die drei Strings aneinander und steht dann wieder vor dem gleichen Problem wie am Anfang?
gruesse
rainer groth
Gruss, Flip
Hallo Flip,
auch ich verneige mich vor Rainers Scharfblick, aber im Nachhinein ist mir die Geschichte auch klar.
[...] wie kommt ein Normalsterblicher auf einen Zeilenumbruch an Stelle xy??
Naja, beim Netscape ist es wohl wichtig, dass genau nach dem HTML-Kommentartag, das am Anfang eines Scripts steht, ein Zeilenumbruch folgt. Wenn nicht, ignoriert er das ganze Script. Probier's mal mit ein paar Script-Zeilen, die statisch in der Datei stehen. Da ist er genauso pingelig. Das habe ich vor längerer Zeit auch nur durch Zufall rausgefunden, als mir mehrere Netscape-Nutzer sagten, meine Scripte auf der Seite würden nicht ausgeführt. Mann, das hat Nerven gekostet... ;)
Also auch in Zukunft bei Unklarheiten immer schön fragen. Bestimmt hat schon mal jemand das gleiche Problem gehabt!
In diesem Sinne weiter viel Spaß!
Martin
Hallo Martin,
Naja, beim Netscape ist es wohl wichtig, dass genau nach dem HTML-Kommentartag, das am Anfang eines Scripts steht, ein Zeilenumbruch folgt.
Kleine Korrektur: dies ist AFAIK nicht nur fuer Netscape's Navigators wichtig.
gruesse
rainer groth
Hallo Flip,
... - wie kommt ein Normalsterblicher auf einen Zeilenumbruch an Stelle xy??
Durch "try and error" ;-)
Ich hab da aber auch noch eine Frage. Um bei Deinem Beispiel zu bleiben: Könnte ich den Befehl auch so gestalten:
string1 = "<a href='test.html' target='neuesfenster' onclick='window.open("
string2 = "'','neuesfenster','top=200,screenX=50,left=350,screenY=300,height=263,width=350'"
string3 = ")'>hallo</a>";
document.write(string1 + string2 + string3);Oder klatscht der kleine Browser nur die drei Strings aneinander und steht dann wieder vor dem gleichen Problem wie am Anfang?
Leider ja :-(
Er (der HTML-Parser liest dann naemlich:
<a href='test.html' target='neuesfenster' onclick='window.open('
wobei er Probleme hat, folgenden Teil HTML-gemaess zu interpretieren:
','neuesfenster','top=200,screenX=50,left=350,screenY=300,height=263,width=350')'
denn hier wird erst der oeffnende Tag geschlossen:
hallo</a>
IMHO waere dies ein Fall fuers Maskieren der Anfuehrungszeichen, die die Argumente von window.open() umschliessen - und wie an anderer Stelle schon geschrieben: spaetestens jetzt wird es richtig spassig :-)
gruesse
rainer groth