Newsgroup: it.comp.lang.javascript
Titolo: richiamare file js esterno

ho creato il file 'javascript-esterno.js' che contiene questa sola 
istruzione (tanto per fare l'esempio):
 
document.write('script esterno<br>');
 
Tale file andrebbe poi richiamato da un altro file, tramite queste 
istruzioni:
 
	script = '\<script type="text/javascript" 
src="script-esterno.js"\>\</script\>';
	document.write(script);
 
Ho voluto per� rendere le cose un po' pi� eleganti, usando quest'altro 
metodo:
 
	script=document.createElement('script')
	script.setAttribute('type', 'text/javascript');
	script.setAttribute('src', 'script-esterno.js');
	document.body.appendChild(script);
 
Tale metodo per� non sembra funzionare, come mai?

 Tale metodo però non sembra funzionare, come mai?
 
Perché hai scelto un'istruzione un po' ambigua da far eseguire allo 
script esterno.
 
Lo script viene caricato in maniera asincrona e quindi dove si dovrebbe 
scrivere nel documento?
 
La console di firefox mostra infatti un warning piuttosto esplicito 
dicendo che il document.write verrà ignorato.
 
Se lo script esterno iniziasse con un document.open() ( e finisse con un 
document.close() ) il tutto diventerebbe chiaro perché riscriveresti il 
documento da zero.
 
Riprova con un banale alert, per esempio.

 Riprova con un banale alert, per esempio.
 
in firefox, la pagina resta sempre in fase di caricamento, in più la 
console visualizza:
 
Data e ora: 29/05/2012 14:03:17
Errore: missing ; before statement
File sorgente: 
http://adtag.neodatagroup.com/ad/tagging.jsp?x=225679.320029.204595.1771.60.0.2.1736031557
.
Riga: 2, Colonna: 8
Codice sorgente:
Tagging cookie IN :Tagging cookie OUT:<br/>Tagging 
Cookie:175309084266465180:26ed2aeed9a079c:: campaign:225679 
creative:204595*4@[29/05/2012 11:34:14][29/05/2012 13:33:05][29/05/2012 
13:59:55][29/05/2012 14:03:17];<br/>Tagging cookie purge 
timestamp:1338120197373<br/>Tagging cookie purge date:27/05/2012 
14:03:17<br/>scrivo i cookies
 
 
Cmq in realtà quello che mi interessa è: richiamare una funzione 
presente in un file js esterno.
 
Quindi riformulo la domanda: è possibile da uno script richiamare una 
funzione presente in un file js esterno?
 
Io ho provato così:
 
//script-esterno.js
	function abc(){
		alert(123);
	}
 
//script principale
	script=document.createElement('script')
	script.setAttribute('type', 'text/javascript');
	script.setAttribute('src', 'script-esterno.js');
	document.body.appendChild(script);
 
	abc();
 
Mi da errore: abs is not defined


 
Se non sei certo che sia necessario il caricamento a runtime di uno 
script prova a spiegare che risultato vuoi ottenere: magari ci sono 
strade alternative e ti si può consigliare diversamente.

 strade alternative e ti si pu� consigliare diversamente.
 
ho una funzione contenuta in un file (test.js)
 
function esempio(){
	//istruzioni
}
 
Chiaro?
 
Oltre a tale file, ne ho altri tre: pippo.js, pluto.js, paperino.js
 
Chiaro?
 
I tre file hanno la necessit� di richiamare la funzione 'esempio' 
contenuta nel file 'test.js'.
 
Chiaro?
 
Potrei copiare il testo della funzione in ciascuno dei tre file, ma per 
carit�... voglio risparmiarmi la creazione di questa rudimentale 
rindondanza!!!
 
Quindi mi chiedo, possibile che JS non abbia un'istruzione tipo quella 
del linguaggio PHP "include_once(nomefile)"?
 
Da notare inoltre che l'istruzione php, carica il file esterno solo una 
volta (_once), per cui se altri script successivi usano sempre la stessa 
istruzione per includere sempre lo stesso file, l'operazione viene 
silenziosamente ignorata.
 
Insomma tutto ci� � molto, ma molto comodo, oltre che funzionale.
Infatti una funzione ha sempre lo stesso nome "esempio", non pu� essere 
dichiarata pi� di una volta.
Bene, usando 'include_once' (non 'include') risolvere la problematica 
diventa una bazzecola.
 
Possibile che una 'meraviglia' simile non esista in JS?

 del linguaggio PHP "include_once(nomefile)"?
 
No, non esiste nulla del genere nel linguaggio in s�, al limite esistono 
cose offerte dall'ambiente host.
 
So comunque che un "module system" standard per ECMAScript � gi� da 
tempo oggetto di discussione, vista l'importanza che assumono oggigiorno 
le web application e vista anche la seconda giovinezza che sta vivendo 
JavaScript / ECMAScript.
 
Pare che non mi sia segnato link particolari, per cui non so bene che 
consigliarti se sei incuriosito e vuoi approfondire.
 
Chiavi di ricerca buone come punti di partenza: "module system" 
accoppiato a "ECMAScript.next" o a "ECMAScript Harmony".
 
Dai comunque un'occhiata a quel che succede attorno al gi� citato 
RequireJS, a CommonJS e a Node.js per avere da subito assaggi delle 
tante cose in ballo nel linguaggio.
 
 
 
 


 
ok, appena posso...

 Si riuscirebbe a risolvere tale problematica?
 
O scrivi il percorso giusto, o usi percorsi assoluti direi.
Ma non credo sia comunque l'approccio che cerchi quello del 
"document.write".
 
Io rinnovo il consiglio: se devi caricare a runtime e cerchi 
compatibilit� cross browser usa RequireJS e ti togli il pensiero.

 compatibilit� cross browser usa RequireJS e ti togli il pensiero.
 
ok