externe javascript-Datei mittels document.write() einbinden
oaktree
- javascript
Hallo!
Mit javascript schreibe ich den gesamten Inhalt einer html-Datei neu. Dabei möchte ich eine externe javascript-Datei einbinden. Wenn ich es mit
document.writeln('<script language="javascript" type="text/javascript" src="datei.js"></script>')
versuche, klappt es im ie und im opera, der nn4.7 ignoriert es aber; d.h., im neuen Quelltext steht dort eine Leerzeile.
Ich habe schon versucht, den </script> Teil in ein neues document.writeln() zu packen oder das gesamte mit wahllosen '+' aufzulockern, aber das hat nichts gebracht. Auch das Zusammenfügen von Variablen führte zum selben Ergebnis:
var Datei = 'datei.js';
document.writeln('<script langu'+'age="jav'+'ascript" type="text/javasc'+'ript" src="'+Datei+'"></sc'+'ript>')
Das Schreiben eines javascript-Bereichs ist kein Problem:
document.writeln('<script language="javascript">')
document.writeln('alert('klappt')')
document.writeln('</script>')
versteht er.
Ich weiß nicht, was ich noch ausprobieren soll.
Vielleicht kennt ja jemand eine Lösung. Ich wäre sehr dankbar dafür.
Danke und bye
Steffen
Hi
Hmm, ich hab vor einiger Zeit auch fruchtlos damit rumprobiert,
sieht so aus als ob NS sich weigert externe JS dynamisch einzubinden
Waer schon echt praktisch sowas ;)
Mal zwo Vorschläge die auf jd Fall mit Frames klappen eventuell sogar ohne:
Workaround1: versuch doch das Script von anfang an statisch einzubinden
und später von der dynamischen Seite aus anzusprechen, z.B. ueber ein
anderes Frame. Eventuell klapt das auch im gleichen Frame!
Workaround2: Falls die Scripte zu groß dafuer sind um auf einmal geladen zu werden
werden koenntest du Sie ja in normalen HTMLs kapseln und die nachladen.
Sach bitte B. falls es klappt!
Bye LanX
Hallo LanX!
Mal zwo Vorschläge die auf jd Fall mit Frames klappen eventuell sogar ohne:
Das ganze mit frames zu lösen ist keine schlechte Idee. Wenn ich keine sauberere Lösung finde, werde ich es so machen.
Vielen Dank!
bye
Steffen
Hallo Steffen,
Auch das Zusammenfügen von Variablen führte zum selben Ergebnis:
var Datei = 'datei.js';
document.writeln('<script langu'+'age="jav'+'ascript" type="text/javasc'+'ript" src="'+Datei+'"></sc'+'ript>')
Baue erst den gesamten Quellcode in einer Variablen zusammen
die_seite='....';
und schreibe dann einfach: document.writeln(die_seite)
Also nur 1 document.write im Text
Viele Grüße
Antje
Hallo Antje!
Baue erst den gesamten Quellcode in einer Variablen zusammen
die_seite='....';
und schreibe dann einfach: document.writeln(die_seite)
Ich habe es jetzt so versucht:
var Seite = '<html><head><script language="javascript" type="text/javascript" src="datei.js"></script></head><body></body></html>';
self.document.open()
self.document.write(Seite)
self.document.close()
(In der Variabel sind keine Zeilenumbrüche.)
Das führt aber zum selben Ergebnis. Wenn ich mir vom nn den neuen Quelltext anzeigen lasse, steht dort:
<HTML><HEAD></HEAD><BODY></BODY></HTML>
Was mache ich falsch?
Danke und bye
Steffen
Hallo oaktree!
(In der Variabel sind keine Zeilenumbrüche.)
Das ist eher schlecht. Zumindest das eine oder andere \n stimmt ihn gnädiger.
Das führt aber zum selben Ergebnis. Wenn ich mir vom nn den neuen Quelltext anzeigen lasse, steht dort:
<HTML><HEAD></HEAD><BODY></BODY></HTML>
Das war zu erwarten.
Was mache ich falsch?
Du glaubst das die Quelltextanzeige bei mit document.write geschrieben Inhalten JavaScript bereiche anzeigt. Tut sie aber nicht.
Ausserdem wird die Quelltextanzeige manchmal nach einen Dokumenten-Reload nicht aktualisert. (->Beenden und neustarten)
Gruss,
Carsten
Hallo Carsten!
Das ist eher schlecht. Zumindest das eine oder andere \n stimmt ihn gnädiger.
Damit wollte ich sagen, dass ich die Variabel richtig geschrieben habe - falls das Forum einen Zeilenumbruch macht.
Du glaubst das die Quelltextanzeige bei mit document.write geschrieben Inhalten JavaScript bereiche anzeigt. Tut sie aber nicht.
Stimmt, das habe ich auch gemerkt, aber das ändert nichts daran, dass die Datei nicht geladen wird. Wenn ich z.B. eine function aus der Datei aufrufen will, kommt die Meldung 'blabla() is not defined'. Auch ein automatischer alert wird nicht ausgeführt.
bye
Steffen
Stimmt, das habe ich auch gemerkt, aber das ändert nichts daran, dass die Datei nicht geladen wird. Wenn ich z.B. eine function aus der Datei aufrufen will, kommt die Meldung 'blabla() is not defined'. Auch ein automatischer alert wird nicht ausgeführt.
Bei mir klappts aber astrein!!! (NS4 /Linux)
Vielleicht solltest du beachten unter welchem Pfad du die externen
Funktionen ansprichst!
Bye LanX
http://www.mathematik.tu-darmstadt.de/~langsdorf/Quickforum/test.htm
*********test.htm **********
<html>
<head>
<title></title>
<script language="JavaScript">
<!--
var Seite = '<html><head><script language="javascript" type="text/javascript" src="datei.js"></script></head><body></body></html>';
self.document.open();
self.document.write(Seite);
self.document.close();
//-->
</script>
</head>
</body>
</html>
*******datei.js ***********
alert("jojo");
Auch das klappt:
****** test.htm *******
...
josef();
//-->
</script>
...
***datei.js ***
function josef(){
alert("josef");
}
Vielleicht solltest du mal deinen kompletten Code posten!
Tschuessi Rolf
Hallo!
Vielleicht solltest du mal deinen kompletten Code posten!
<html>
<head>
<title>test</title>
<script language="javascript">
<!--
function schreiben()
{
var Seite = '<html><head><script language="javascript" type="text/javascript" src="datei.js"></script></head><body></body></html>';
self.document.open()
self.document.write(Seite)
self.document.close()
}
//-->
</script>
</head>
<body onLoad="schreiben()">
</body>
</html>
und die datei.js sieht so aus:
alert("Es funzt!")
Die Pfadangabe stimmt bzw. befinden sich beide Dateien im selben Ordner.
bye
Steffen
Hi Steffen
function schreiben()
{
var Seite = '<html><head><script language="javascript" type="text/javascript" src="datei.js"></script></head><body></body></html>';
self.document.open()
self.document.write(Seite)
self.document.close()
Ich dachte zuerst es liegt daran das du keine Semikolons eingefuegt hast,
aber ich versteh zumindest dein Problem besser, je nach useraction JS-Code
nachladen (wahrscheinlich mit Daten),allerdings ...
... was bei dir in schreiben() geschieht, ist dass du die gesamte HTML-Page
ueberschreibst, dann koenntest du aber auch, wie bereits vorgeschlagen
gleich ne ganze HTML-Page nachladen, die den nachzuladenden Code kapselt.
Damit der alte Code nicht ueberschrieben wird lädst du ihn ebenfalls nach...
<script src=altercode ...
<script src=neuercode1 ...
...HTML design ...
Ich persoenlich wuerde es allerdings gleich mit Frames machen! Einer fuer den alten
Code mit funktionierender HTML-GUI, und die nachzuladenden Daten in die zwote
Frame, des ist alles viel sauberer!
Verstehste wie ich das meine???
Viele Gruesse Rolf
Hallo Rolf!
Ich persoenlich wuerde es allerdings gleich mit Frames machen! Einer fuer den alten
Code mit funktionierender HTML-GUI, und die nachzuladenden Daten in die zwote
Frame, des ist alles viel sauberer!
Verstehste wie ich das meine???
Jo, das ist eine gute Idee und die Umsetzung ist auch kein Problem. Ich finde es zwar etwas "unsauber", aber da mir sonst auch nichts mehr einfällt, werde ich auf den nn fluchen und es mit frames machen ;-)
bye
Steffen
Hi Steffen
Naja Frames haben einige Designtechnische Probleme, wenn man aber mit JS anfaengt
haben sie Riesenvorteile. Mir fallen auf Anhieb kaum browser ein bei den DHTML
mit JS dafuer aber keine Frames sinnvoll sind!
Mal zwo anderer Ansätze ohne Frames:
(Ich nehme mal an du willst per Mausklick Daten nachladen willst, indem du
ein extrenes JS-File einbindest)
a) Du lädst immer die gleiche Page nach alleine im Suchstring uebergibst du den
Namen der jeweils nachzuladenden Datei, also
page.htm?datenX.js
Wir haben gesehen, das NS extrenes JS included, solange es im Header passiert.
Im header wertest du dann den Suchstring aus und machst ein
entsprechendes write.
also:
*********** page.htm ************
<head>
suchstring=window.location.search;
write('<script src='+suchstring+'>')
</head>
<body>
<a href=page.htm?daten1.js> daten1 anzeigen</a>
<a href=page.htm?daten2.js> daten2 anzeigen</a>
<script>
// daten auswerten und reinschreiben
</script>
</body>
Das klappt bestimmt unter NS,ich geh jetzt abe mal an die Sonne und du testest!
b) Dieser Ansatz geht anders (verschachtelte JS-Includes) aber ich find
den letzten schon genial genug ;-)) falls der nicht klappt reden wir
weiter!
Viele Grueße
Rolf
Hallo Rolf!
Naja Frames haben einige Designtechnische Probleme, wenn man aber mit JS anfaengt
haben sie Riesenvorteile. Mir fallen auf Anhieb kaum browser ein bei den DHTML
mit JS dafuer aber keine Frames sinnvoll sind!
Also so sehr Anfänger bin ich dann doch nicht mehr, dass ich das nicht hinbekommen würde ;-) Ich konnte mir nur nicht erklären, warum der nn die Datei nicht läd. Das hat ja jetzt Antje aufgeklärt und ich werde das dann mal online ausprobieren (das kann ich nur gerade nicht).
bye
Steffen
Hi Steffen
Also so sehr Anfänger bin ich dann doch nicht mehr, dass ich das nicht hinbekommen würde ;-) Ich konnte mir nur nicht erklären, warum der nn die Datei nicht läd. Das hat ja jetzt Antje aufgeklärt und ich werde das dann mal online ausprobieren (das kann ich nur gerade nicht).
??? offensichtlich bin ich der anfaenger weil ich verstehe Antjes Posting
nicht, wenns an der Pfadangabe liegt wieso klappt es im Header aber
nicht im Body???
Naja, egal, tschuess, lebt wohl, seid fruchtbar etc... ;-)
Rolf
Hallo Rolf!
??? offensichtlich bin ich der anfaenger weil ich verstehe Antjes Posting
nicht, wenns an der Pfadangabe liegt wieso klappt es im Header aber
nicht im Body???
Naja, die Aussage ist wohl die, dass der nn in die Datei schreibt, wo die Datei sich befindet und davon ausgehend dann die Pfadangaben berechnet. Warum das nicht immer zu einem Fehler führt, verstehe ich auch nicht, aber schieben wir es getrost auf den Bug ;-)
Naja, egal, tschuess, lebt wohl, seid fruchtbar etc... ;-)
Ich werde mein bestes versuchen ;-)
Nochmals danke und bye
Steffen
Hallo Steffen,
ich habe es
also rufe ich die Datei so auf:
http://lokal.kd.de/test.html
klappt es.
So aber nicht:
file://r:/kd/test.html
^^
der NN macht daraus ein:
file:/r:/kd/test.html
^^
Die Pfadangabe stimmt bzw. befinden sich beide Dateien im selben Ordner.
eben nicht, der NN schreibt in Seiten mit document.write oft ein
<BASE HREF="file:/r:/kd/">
in den Quelltext rein und das fehlerhaft. Dieser Bug - er gilt nicht für alle NN-Browser - sorgt dafür, dass er die js-Datei nicht findet.
Online klappt es dann.
Viele Grüße
Antje
Hallo Antje!
Die Pfadangabe stimmt bzw. befinden sich beide Dateien im selben Ordner.
eben nicht, der NN schreibt in Seiten mit document.write oft ein
<BASE HREF="file:/r:/kd/">
in den Quelltext rein und das fehlerhaft. Dieser Bug - er gilt nicht für alle NN-Browser - sorgt dafür, dass er die js-Datei nicht findet.
Online klappt es dann.
Vielen Dank für den Hinweis! - dann liegt also doch nicht an mir ;-)
Ich werde es bei Gelegenheit mal testen.
bye
Steffen
Hallo!
<html>
<head>
<title></title>
<script language="JavaScript">
<!--
var Seite = '<html><head><script language="javascript" type="text/javascript" src="datei.js"></script></head><body></body></html>';
self.document.open();
self.document.write(Seite);
self.document.close();
//-->
</script>
</head>
</body>
</html>
Wenn ich es so mache, klappt es bei mir auch, aber wenn ich es in eine function packe, klappt es nicht. Da ich beim Laden der Datei noch nicht alle Inhalte der "neuen" Datei weiß, kann ich es aber nicht so machen.
Außerdem wiederholen sich bei dieser Methode einige Elemente.
bye
Steffen
Hi Steffen,
Wenn ich es so mache, klappt es bei mir auch, aber wenn ich es in eine function packe, klappt es
nicht.
????
Sorry, ich versteh nur Bahnhof, poste doch mal deinen Code,
dann wirds vielleicht klarer!
Viele Grueße Rolf
Hallo LanX!
Sorry, ich versteh nur Bahnhof, poste doch mal deinen Code,
dann wirds vielleicht klarer!
Siehe <?m=135156&t=25872>
bye
Steffen