Newsgroup: it.comp.lang.javascript
Titolo: Inserire uno script in altro script

Sulle pagine del mio sito uso per l'intestazione uno script in javascript 
richiamato dalla istruzione:
<script type="text/javascript"  src="intestazione.js"></script>Vorrei 
incorporare, in coda al file intestazione.js, altre istruzioni provenienti 
da questo file esterno (lo share di facebook)
<script src="
http://static.ak.fbcdn.net/connect.php/js/FB.Share
"
        type="text/javascript">
</script>E' possibile?
 
Romeo
-- 
 
http://www.brianzapopolare.it
 
 
 

 E' possibile?
 
Non si può includere un file javascript in un altro file javascript.
Li devi includere entrambi nella pagina html:
 
<head>
<script type="text/javascript" src="intestazione.js"></script>
<script src="
http://static.ak.fbcdn.net/connect.php/js/FB.Share
" 
type="text/javascript"></script>
</head>
 
Inoltre importa l'ordine di inserimento, quindi se vuoi usare funzioni o 
variabili globali di facebook in intestazione.js (cosa che dal tuo 
messaggio non capivo), devi mettere prima facebook e poi intestazione.js:
 
<head>
<script src="
http://static.ak.fbcdn.net/connect.php/js/FB.Share
" 
type="text/javascript"></script>
<script type="text/javascript" src="intestazione.js"></script>
</head>
 
Ciao.

 Non si può includere un file javascript in un altro file javascript.
 
Aggiungo che se il tuo intestazione.js dipende da un altro script 
(facebook in questo caso) allora è buona norma scriverlo nel commento 
iniziale di intestazione.js (scrivendo: "questo file dipende da xyz.js 
per utilizzarlo dovete includere prima xyz.js e poi questo script.) E 
magari includendo pure un esempio di come si includono entrambi in una 
pagina html. Ciao.


Il mio probleme è che mentre il mio file ha sempre lo stesso nome e
contenuto che può variare volevo fare la stessa cosa con il file fornito da
facebook ovvero scrivere un file generico che includesse il file di facebook
o qualunque altro file fornito tramite un collegamento esterno.
 
 
Romeo
 
 
 


Si, in diversi modi. Puoi usare `document.write`, puoi usare le DOM API,
puoi usare l'XMLHttpRequest (per recuperare il contenuto del file
javascript, e successivamente `eval`); oppure puoi usare RequireJS:
 
 
http://requirejs.org/
 

 o qualunque altro file fornito tramite un collegamento esterno.
 
Scusa, magari e' colpa mai, ma bisogna che mi fai un esempio pratico 
perche' non ho capito nulla. File generico? includesse il file di 
facebook? esempio pls :)

"coder" <c...@nomail.not> ha scritto nel messaggio 
news:jfcgma$mh3$1...@speranza.aioe.org...

Per inserire un "condividi" di Facebook attualmente bisogna inserire il 
seguente codice:
------
<a name="fb_share">
<script src="
http://static.ak.fbcdn.net/connect.php/js/FB.Share
"
        type="text/javascript">
</script>
------
Quel modo di inserire il "condividi" potrebbe cambiare nel tempo ed essere 
perciò inutilizzabile a meno di non cambiarlo in tutte le pagine (statiche) 
del sito che sono diverse migliaia. Pertanto sarebbe utile poter scrivere un 
unico file share.js che incorporasse il codice Facebook, che venisse 
richiamato  con <script src="share.js"
        type="text/javascript"></script> ed il cui risultato, nel sorgente 
generato, fosse il codice Facebook citato. Il tentativo di trasformare il 
codice Facebook in una stringa e scriverlo attraverso un document.write non 
ha dato nessun risultato forse perché risulterebbe uno script dentro un 
altro scrpt.
In realtà la questione più generale è anche se sia possibile (direttamente o 
con qualche artificio)  inserire dinamicamente in un file js un pezzo di 
codice proveniente da un file esterno (in questo caso 
src="
http://static.ak.fbcdn.net/connect.php/js/FB.Share
").
 
Grazie per l'attenzione.
 
Romeo
 
 
http://www.brianzapopolare.it
 
 
 

 del sito che sono diverse migliaia.
 
Ok, ora si capisce.
Il fatto e' che come mostri tu il bottone non si crea solo grazie alla 
presenza dello script ma "dello script + il tag a", quindi sono entrambe 
le cose che potrebbero cambiare. Non ha senso trovare una soluzione (con 
magheggiamenti piu' o meno strani) per lo script quando domani anche il 
tag "a" potrebbe cambiare.
Quello che mi viene in mente e':
1) IMvHO non penso proprio che facebook si mettera' mai a cambiare 
queste cose di base, e se lo facesse manterrebbe la retrocompatibilita',
2) se le pagine sono php e il contenuto e' gia' creato server-side, 
anche quella porzione di pagina puoi crearla a runtime
3) se le pagine sono html, quando volessi mai cambiarle fai una passata 
con programmi tipo "sed" e rimpiazzi il testo.
Ciao.

"coder" <c...@nomail.not> ha scritto nel messaggio 
news:jfesqg$n23$1...@speranza.aioe.org...

Purtroppo le pagine sono in HTML e non in php ed č per questo che cercavo 
una soluzione "simil php" ma a quanto pare non c'č.
Usando Dreamweaver non ci sarebbe il problema della sostituzione di pezzi di 
codice ma poi dovrei uploadare di nuovo gli oltre 4000 file del sito.
Grazie comunque per l'attenzione.
 
Romeo
 
-- 
http://www.brianzapopolare.it
 
 
 

 una soluzione "simil php" ma a quanto pare non c'è.
 
Come ti ho già detto nel mio post, la soluzione c'è, e può essere fatta
in diversi modi. Nel tuo caso, direi che quella più appropriata - visto
che non si tratta solo di un file javascript ma di un "fragment" HTML -
è quella di usare o `document.write` (che, contrariamente a quanto dici
tu, funziona benissimo anche all'interno di script, a meno di non
commettere errori) o le DOM API (per aggiungere sia il nodo `a` che il
nodo `script`).

 in diversi modi.
 
Io non dicevo che era impossibile, dicevo che uno script non puo' 
includere un altro script.
Red Web Master e ZERO guardate se questo va bene.
 
<html>
<head>
<script src=prova.js></script>
</head>
<body onload="fb_marker_check()">
	<h3>test1</h3>
	<p class="fb_marker">
	<h3>test2</h3>
	<p class="fb_marker">
	<h3>test3</h3>
	<p class="fb_marker">
</body>
</html>
 
dove prova.js contiene:
 
function fb_marker_check() {
	markers = document.getElementsByClassName("fb_marker");
	for (i = 0; i < markers.length; i++) {
		var a = document.createElement("a");
 
a.name
 = "fb_share";
		var script = document.createElement("script");
		script.src = "
http://static.ak.fbcdn.net/connect.php/js/FB.Share
";
		markers[i].appendChild(a);
		markers[i].appendChild(script);
	}
}
 
Ciao

 Red Web Master e ZERO guardate se questo va bene.
<CUT>
 
Ho fatto diverse prove e pare che ora funzioni anche nel caso di uno script 
all'interno di un altro script.
In questo modo:
 
PAGINA HTML QUALSIASI
 
<script type="text/javascript"  src="styles/facebook.js"></script>
 
FILE FACEBOOK.JS
 
// Compatibile con XHTML 1.1
var cText = '';
cText += '<a name="fb_share">';
cText += '&nbsp;';
cText += '</a>';
cText += '<script src="
http://static.ak.fbcdn.net/connect.php/js/FB.Share
"';
cText += 'type="text/javascript">';
cText += '</script>';
 
 
document.write(cText);
 
 
NOTA
Il codice non funzionava, e non so perché, se lo scrivevo così (ovvero un 
Tag vuoto):
 
cText += '<a name="fb_share">';
cText += '</a>';
...
 
Terrò comunque gelosamente  presenti gli altri suggerimenti di Zero e Coder 
nel caso qualcosa non funzionasse o per altri usi.
 
Ciao e grazie
 
Romeo
 
-- 
http://www.brianzapopolare.it
 
http://www.prcbrianza.it
 
 
 

 includere un altro script.
 
Infatti il mio post non era diretto a te, quanto all'OP.
 
Quanto il fatto che uno script non possa includere un altro script, è
solo una questione di cosa s'intende per "inclusione", e di contesto.
Se intendiamo dire che "nativamente" non esiste alcuna istruzione
specifica per includere uno script da codice JavaScript, e
circoscriviamo questa definizione al JavaScript usato attualmente nei
browser, allora la risposta è si, uno script non può includere un altro
script.
Se invece cambiamo la definizione o il contesto, allora la risposta è
no, uno script può includere un altro script. Ad esempio, in CommonJS
puoi tranquillamente usare `require` (NodeJS, Addon-SDK, Ringo, Narwhal,
etc); su browser puoi usare RequireJS per ottenere la stessa cosa (in
questo caso l'istruzione non è "nativa"); In ES6 invece sono stati
introdotti i moduli di CommonJS a livello di sintassi.

 cText += '</script>';
 
Ti conviene fare l'escape del tag:
 
    cText += '<\/script>';
 
Oppure separarlo:
 
    cText += '</scr' + 'ipt>';
 
Questo perché, fintanto che è in un file esterno non è un problema, ma
se provi a metterlo come codice inline di un tag <script>, il browser
interpreterà quella stringa come chiusura del tag stesso, dandoti un errore.