• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

In JS Unterprogramm starten

stromij

Neues Mitglied
Hey!

Besteht die Möglichkeit in JavaScript ein Unterprogramm zu starten. Also zum Beispiel habe ich das Programm hallo.js und will daraus auf das Programm hallo_welt.js zugreifen. Geht das??

Grüße
Stromi
 
Werbung:
Dynamisches, aber nicht gerade empfehlenswertes, Einbinden von externen JS-Scripts funktioniert über document.write( "<script type='text/javascript' src='<Die URL>'></script>" );
Ich verlinke immer alle nötigen externen Skripte auf der Hauptseite und schreibe Funktionen, die Funktionen aus beiden Dateien benötigen, direkt ins Hauptscript.
 
Werbung:
Ich meine ersteres, also dass ich ein Programm einbinde, als wäre es bestandteil des laufenden programmes (also hallo.js läuft und nimmt hallo_welt.js in sich auf).

Wenn ich javascript in Html einbinde, geht das ja über <script type="text/javascript" src="mein pfad" />
und genau das selbe will ich im Prinzip auch machen, nur dass ich kein HTML Code sondern ein javascriptcode habe.
 
Wie gesagt, ein dynamisches, aber nicht wirklich empfohlenes Einbinden von externen JS-Dateien in anderen externen JS-Dateien funktioniert mit
Code:
document.write( "<script type='text/javascript' src='<Die URL>'></script>" );
da führt kein Weg drum herum, soweit ich weiß.
 
Oh, okay.

Sorry, ich hab geschreiben, als dein Beitrag erschien. Hab ich also nicht mitbekommen.

Dann werd ich's wohl damit mal probieren...

Naja, ich weiß nich was ich falsch mache, funktioniert aber nicht. Ich hab's so gemacht wie du, aber es zeigt keine Wirkung. :-(

Hier mein Code:
Code:
document.write('script type="text/javascript" src="./hallo_welt.js"></script>');

Wenns nichts anderes gibt, muss mich mir halt was anderes einfallen lassen..

Grüße
Stromi
 
Werbung:
Kein Problem, kommt vor.

Offiziell gibt es da keine Unterstützung seitens JavaScript. Ich habe gerade etwas gegooglet und das hier gefunden: klick
Es wird auch gleich erklärt, warum document.write( "<script type='text/javascript' src='./hallo_welt.js'></script>" ); nicht empfehlenswert ist:
Es ist schlechter Still und wird bei "echtem" XHTML nicht funktionieren.
Habe auch gleich mal deinen Fehler angeschrieben, du hast den Tag-Auf vergessen... ;)

Eine bessere Methode sei das Anfordern der externen Datei mittels AJAX und aktivieren mittels eval( );, aber ich finde, das ist zu viel Wirbel, den man auch mit 1 Zeile realisieren kann. Ich denke, wenn es nicht unbedingt nötig ist, sollte man es nicht machen.
 
Ja, stimmt, das ist tatsächlich zu viel Wirbel, zumal ich eingestehen muss, dass ich Ajax nur vom hören kenne. Demnach müsste ich mich auch noch damit ausseinandersetzten, was unter Zeitdruck ein wenig schlecht ist.
Werd's wohl anders lösen.

Stimmt, der < fehlt :*>

Trotzdem Danke für die Mühe die du dir gemacht hast!!!

Grüße
Stromi
 
Mühe kann man das wohl kaum nennen, diesen Lösungsweg kenne ich auch so. Und die paar Sekunden Google sind auch nicht der Rede wert. ;)
Trotzdem, gern geschehen!
 
Werbung:
XHTML hat sowieso keine Zukunft, insofern ist diese Aussage egal.

Die Variante mit document.write ist nicht ganz richtig, da das schliessende Tag maskeirt werden muss.
Code:
document.write( "<script type='text/javascript' src='./hallo_welt.js'><\/script>" );
Das geht natürlich nur, während die Seite noch am laden ist. Die andere Variante (die auch in dem verlinkten Thread gezeigt wird ist diese:
Code:
function include(file)
{
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = file;
    document.body.appendChild(script);
}
Dabei muss aber klar sein, dass das Skript nicht auf das Laden der Inhalte wartet. Es ist aber möglich, in den meisten Browser, entweder über onload oder onreadystatechange eine Callbackfunktion zu starten.

Code:
function include(src, f) {
	var s = document.createElement('script');
	if(s.attachEvent) {
		s.attachEvent('onreadystatechange', f);
	} else {
		s.onload = f;
		s.onerror = function() { 
			aler('kann ' + src + ' nicht laden.');
		};
	}
	s.src = src;
	document.body.appendChild(s);
};
 
Wieso muss das schließende Tag maskiert werden? Die restlichen Slashes mussten immerhin auch nicht escapet werden, oder verstehe ich da etwas falsch?

Letztere Methode scheint mir besser. Der Code auf der verlinkten Seite schien mir unnötig in die Länge gezogen, deswegen habe ich den erst gar nicht durchgelesen, nur überflogen... Selbige Methodik wird erst nach dem Laden der Seite verwendet, das heißt, nachträgliches Laden von externen Skripten wäre möglich...
Ich merke schon richtig wie mir das Helfen auf dieser Seite hilft selbst mehr zu lernen... :D
 
Hey!

Ich stell mich jetzt wohl ziemlich dusslig an, doch das läuft bei mir nicht. Ich glaub das liegt auch ein bisschen daran, dass ich nur Bahnhof verstehe.
also erstmal das, was ich geschrieben habe:
Code:
 function include(file)
{
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = './hallo_welt.js';
    document.body.appendChild(script);
}
function include(src, f) {
var s = document.createElement('script');
	if(s.attachEvent) {
		s.attachEvent('onreadystatechange', f);
	} else {
		s.onload = f;
		s.onerror = function() { 
			alert('kann ' + src + ' nicht laden.');
		};
	}
	s.src = src;
	document.body.appendChild(s);
}[FONT=Verdana]

Die erste function hab ich noch verstanden, aber bei der zweiten fängs an zu stocken. Könntest du das mir vielleicht noch mal erklären? Das wäre genial!!!

Viele Grüße
Stromi
[/FONT]
 
Werbung:
Ich bin mir da auch nicht ganz so sicher. da "s" der neue <script>-Tag ist, frage ich mich, wieso das "onreadystatechange"-Event diesem zugeordnet wird. Der Erklärung zufolge muss das Script auf die Fertigstellung des Dokuments warten. Ich würde die Funktion so aufbauen:

Code:
function include( src ) {
  var script = document.createElement( "script" ); // Das script-Element erzeugen
  script.src = src; // Dem script-Element die URL der externen Datei zuweisen
  if( document.attachEvent ) { // Auf IE überprüfen
    document.attachEvent( "onreadystatechange", function( ) {
      // Dies ist der Listener für die Fertigstellung des DOMs, nicht der gesammten
      // Homepage mitsamt Bildern.
      if( this.readyState === 4 && this.status === 200 ) {
        document.body.appendChild( script );
      }
    }
  } else {
    document.addEventListener( "DOMContentLoaded", function( ) {
      document.body.appendChild( script );
    }
  }
}

Die jQuery-Funktion ready( ); überprüft auch, ob das Dokument bereits geladen ist. Nachträgliches Laden würde mit dieser Funktion nicht funktionieren... Dafür gibt es die erste.
 
Ich bin mir da auch nicht ganz so sicher. da "s" der neue <script>-Tag ist, frage ich mich, wieso das "onreadystatechange"-Event diesem zugeordnet wird. Der Erklärung zufolge muss das Script auf die Fertigstellung des Dokuments warten.
Nein das ist falsch. Im IE wird dieser Event gefeuert, wenn das Skript geladen wird. Das hat nichts mit dem Dokumnet an sich zu tun, dass ist bereits fertig, die Funktion soll ja nach dem laden des Dokuments aufgerufen werden.

EDIT: Deshalb funktioniert deine Funktion auch nicht, die Events die du verwendest sind schon längst erfolgt.

@stromij: Was willst du denn Wissen?
 
Also, wenn ich ein script-Element erschaffe(n lasse) und diesem die src gebe, wird dieses automatisch geladen und nicht erst, nachdem das Element eingefügt wurde? Jetzt hab ich's verstanden. :D
 
Werbung:
Nein.

Schau es dir genau an:
Code:
<script type="text/javascript">
document.write( "<script type='text/javascript' src='<Die URL>'></script>" );
</script>

EDIT: Ach so, *dieser* hatte ich nicht gelesen, dieser ja, es wird aber der drumherum geschlossen
 
Werbung:
Ihr seid mir ein bisschen zu schnell :D

Vielleicht liegts auch daran, dass ich zur Zeit noch nicht "der" JavaScripter bin. Ich kenne die Befehle (und versteh sie folglich daraus auch nicht).

Ich denke, ich werde die Frage erst mal für mich offen lassen und mir die ganzen Befehle erarbeiten. Ich hoff, dass ich das dann versteh. Wird wohl etwas länger dauern.

Trotzdem vielen Dank ihr beiden!!! Ist klasse, dass ihr mir helfen wolltet, doch aufgrund mangelndem Vorwissen wohl nicht konntet!
Wenn's dann trotzdem nicht klappt, frag ich noch mal!!!

Grüße
Stromi
 
Zurück
Oben