Script in Script
Hajo Newe
- javascript
0 Antje Hofmann0 Calocybe0 Antje Hofmann0 Calocybe
0 André Laugks
Hi !
Ich habe da mal eine technische Frage und komme erst einmal zur Vorgeschichte. Ich schreibe mein Menübaum über ein Javascript in eine neue Datei, die ersetzt wird. Dieses läut ja auch ohne weiteres. Nun aber zu meinem Problem! Ich möchte in dieser neuen Datei wiederum ein Javascript aufrufen. Wie also schreibe ich per Javascript dieses Javascript in die neue Datei !
Für einige Rätschläge wäre ich sehr dankbar !
Gruß Hajo
Nun aber zu meinem Problem! Ich möchte in dieser neuen Datei wiederum ein Javascript aufrufen. Wie also schreibe ich per Javascript dieses Javascript in die neue Datei !
Für einige Rätschläge wäre ich sehr dankbar !
Hallo Hajo,
indem du alle relevanten Zeichen mit \ maskierst.
Z.B. so:
<script language="JavaScript">
<!--
document.writeln("<script language="JavaScript">")
document.writeln("<!--")
document.writeln("function hal()")
document.writeln("{alert("Hallo");}")
document.writeln("//-->")
document.writeln("</script>")
document.writeln("<a href="javascript:hal();">Test</a>")
//-->
</script>
Viele Grüße
Antje
Hi Antje!
indem du alle relevanten Zeichen mit \ maskierst.
Z.B. so:
Uebertreibst Du es nicht ein bisschen mit dem Ausmaskieren der Sonderzeichen? Das ist doch kein Perl, sondern Javascript. Eigentlich musst Du nur zwei Zeichen maskieren, naemlich \ und ". Aber ich wuerde an Deiner Stelle sowieso die Strings in ' einschliessen, dann musst Du nur \ und ' maskieren, und die kommen imo viel seltener vor.
»» document.writeln('<script language="JavaScript">')
»» document.writeln('<!--')
»» document.writeln('function hal()')
»» document.writeln('{alert("Hallo");}')
»» document.writeln('//-->')
»» document.writeln('</script>')
»» document.writeln('<a href="javascript:hal();">Test</a>')
Ist das nicht etwas uebersichtlicher? Ach so, mehr wolltest Du mir ja nicht zugestehen... ;-)
Calocybe
Hi Antje!
indem du alle relevanten Zeichen mit \ maskierst.
Hallo Calocybe,
Z.B. so:
Uebertreibst Du es nicht ein bisschen mit dem Ausmaskieren der Sonderzeichen?
stimmt etwas sehr viel, aber bei dir ist eins zuwenig :-)
Die Fehlermeldung von beiden Browsern klingt noch in meinen Ohren :-)
»» document.writeln('//-->')
hier muß eins her, dann klappt es.
Ist das nicht etwas uebersichtlicher? Ach so, mehr wolltest Du mir ja nicht zugestehen... ;-)
natürlich nicht :-)
Viele Grüße
Antje
PS: Ist lang her, daß du mich verbessert hat, war mal wieder richtig schön es zu lesen.
Hi again!
»» document.writeln('//-->')
hier muß eins her, dann klappt es.
Echt, wieso? Was hat er denn da dran auszusetzen? Uebersehe ich jetzt was, oder warum faellt mir kein logischer Grund ein?
PS: Ist lang her, daß du mich verbessert hat, war mal wieder richtig schön es zu lesen.
Naja, selber schuld wenn Du die ganze Zeit immer alles richtig gemacht hast. Bau halt einfach wieder ein paar Fehler ein, dann melde ich mich schon. ;-)
Calocybe
Hallo Calocybe
»» document.writeln('//-->')
hier muß eins her, dann klappt es.
Echt, wieso? Was hat er denn da dran auszusetzen? Uebersehe ich jetzt was, oder warum faellt mir kein logischer Grund ein?
ich habe mir folgende Erklärung darüber zurecht gelegt und auch etwas damit experimentiert.
läßt man in einem Script </script> weg, wird dieses Script nicht ausgeführt. Der Navi schreibt zusätzlich ein paar hübsche Sonderzeichen und der IE ignoriert alles.
Ich denke damit hängt auch das Verhalten im Beispiel zusammen.
In dem Moment wo der Browser unmaskiert //--> liest, interpretiert er es auch. Sucht dann nach </script> und findet es nicht, weil es ja erst noch geschrieben wird.
Der Browser ist dann überzeugt, da steckt ein Fehler und reagiert entsprechend.
Vielleicht erinnerst du dich noch, an den Fall, wo der Navi bei mir solche krausen HTML-Befehle in den Quelltext geschrieben hat. Dies verschwand nachdem ich alles vollständig maskiert hatte.
Heute kam ich drauf, es lag an dem unmaskierten //-->
Nun wieder einmal eine mögliche Erklärung gefunden.
Viele Grüße
Antje
Moin Antje!
In dem Moment wo der Browser unmaskiert //--> liest, interpretiert er es auch. Sucht dann nach </script> und findet es nicht, weil es ja erst noch geschrieben wird.
Ich finde, er sollte das nicht interpretieren. Das ist allein fuer aeltere Browser gedacht, und wenn diese dort ploetzlich ein Kommentarende erkennen, ist das vollkommen in Ordnung. (Man muss also auf jeden Fall etwas unternehmen, damit die Zeichenkette --> nicht vorzeitig auftritt, eben z.B. ein \ einfuegen.) Aber script-faehige Browser sollten imho allein nach dem </script> schauen. Der Kommentar geht sie nichts an. Sonst koennte man ja auch das // weglassen, ohne eine Fehlermeldung zu erhalten. Kann man aber nicht, denn nur durch das // wird diese Zeile als JS-Kommentar interpretiert und nicht als JS-Anweisung. Liege ich jetzt voellig schief, oder ist das wirklich ein Bug in beiden Browsern?
Vielleicht erinnerst du dich noch, an den Fall, wo der Navi bei mir solche krausen HTML-Befehle in den Quelltext geschrieben hat. Dies verschwand nachdem ich alles vollständig maskiert hatte.
Heute kam ich drauf, es lag an dem unmaskierten //-->
Probier doch mal, stattdessen das </script> zu maskieren, was passiert dann?
Calocybe
Hallo Calocybe,
Ich finde, er sollte das nicht interpretieren. ...
Der Kommentar geht sie nichts an. Sonst koennte man ja auch das // weglassen, ohne eine Fehlermeldung zu erhalten. Kann man aber nicht, denn nur durch das // wird diese Zeile als JS-Kommentar interpretiert und nicht als JS-Anweisung. Liege ich jetzt voellig schief, oder ist das wirklich ein Bug in beiden Browsern?
Ich habe mittlerweile darüber nachgedacht, daß die Angabe von <!-- //--> in diesem Zusammenhang eigentlich vollkommener Blödsinn ist. Denn ein js-unfähiger Browser kann diese Zeichenkette nicht schreiben. So gesehen, dürfte diese Zeichenkette gar nicht auftauchen in einer Seite, die mittels document.write() geschrieben wird. Mögliche Ausnahme sind Kommentare, nur wer schreibt sie schon in eine dynamisch erstellte Datei, von Ausnahmen abgesehen.
Vielleicht erinnerst du dich noch, an den Fall, wo der Navi bei mir solche krausen HTML-Befehle in den Quelltext geschrieben hat. Dies verschwand nachdem ich alles vollständig maskiert hatte.
Heute kam ich drauf, es lag an dem unmaskierten //-->Probier doch mal, stattdessen das </script> zu maskieren, was passiert dann?
Keine Ahnung, ich probiere es auch nicht mehr aus. Ich habe das dynamische Schreiben des externen Scriptes verworfen, weil der Navi mir laufend das Layout zerschlagen hat. Der besitzt diesbezüglich einen ganz gemeinen Bug und da habe ich lieber die gesamte js-Datei geändert.
Viele Grüße
Antje
Hi Antje!
Ich habe mittlerweile darüber nachgedacht, daß die Angabe von <!-- //--> in diesem Zusammenhang eigentlich vollkommener Blödsinn ist. Denn ein js-unfähiger Browser kann diese Zeichenkette nicht schreiben.
Oh, stimmt. Hoechstens um den Netscape Source Viewer zu einer besseren Darstellung zu bewegen, koennte man es mit aufnehmen. Aber jetzt werde ich wohl zu perfektionistisch... *g*
Keine Ahnung, ich probiere es auch nicht mehr aus.
Naja, ich bin auch zu faul. Bleibt es wohl fuer diesmal ungeloest. Aber wer weiss, irgendwann kommen wir bestimmt noch mal drauf zurueck. (da faellt mir grad was ein, sowas mit Objekten...)
Calocybe
Hallo"!
Ich möchte in dieser neuen Datei wiederum ein Javascript aufrufen. Wie also schreibe ich per Javascript dieses Javascript in die neue Datei !
Du möchtest also ein Js durch ein JS aufrufen?
<script language="JavaScript">
<!--
Zwei()
/ -->
</script>
<script language="JavaScript">
<!--
function Zwei()
{
........
}
//-->
</script>
Das zweite Script einfach aufrufen, so würde ich es machen. Man kann ja jetzt beide seperat in <script> einbinden, oder beide zusammen.
Mit freundlichen Grüßen
André