Newsgroup: it.comp.lang.javascript
Titolo: Codice da altro file

Stavo cercando il modo di inserire all'interno di un file un pezzo di codice
preso da un altro.
Qualcosa come HTMLElement.innerHTML = altro file.HTMLElement.innerHTML.
Senza però dovere aprire un'altra finestra.
Grazie.
-- 
Stefano

, 
sdreiTOGL...@provincia.ra.it
 says...

Con JavaScript l'unica maniera per farlo è caricare l'altro file in un 
frame nascosto (dimensioni zero o un iframe) ed andare a prendere il 
codice che ti serve li dentro.
Considera comunque di passare al server-side ed includere da li, ti 
togli un sacco di grattacapi (di compatibilita' innanzitutto) e 
velocizzi la cosa per l'utente.
Occhio che cmq funziona solo se i due files sono nello stesso dominio.
-- 
Ciao, Riccardo
------------------------------------------------------------------------
http://www.jsdir.com
 ---- Bring Your Site To Life!!!!
http://www.wmtools.it
 ---- WebMasterTools - Servizi per il tuo sito
http://www.dev2dev.it
 ---- La rete ha connesso nuove particelle - D2D006
------------------------------------------------------------------------
Per rispondere: togli il PUNTO e metti un .


Puoi usare le funzioni DOM.
Qualcosa del tipo (per geko, sotto IE devi usare ActiveXObject(...)):
var xmldoc = document.implementation.createDocument("","",null);
xmldoc.async = false;	// carichi in modo sincrono
xmldoc.load(url);
// adesso in xmldoc hai il documento ...
// trovi l'elemento da cui vuoi partire
var elemsrc = xmldoc.getElementById("IdSorgente");
// cloni l'elemento e tutti i suoi figli
var elemcopy = elemsrc.cloneNode( true );
// trovi l'elemento in cui vuoi inserire
var elemdst = document.getElementById("IdDestinazione");
// inserisci
elemdst.appendChild( elemcopy );
Non ho testato, se segui questa strada fallo tu e dicci se funziona.
Ciao.
	-Ema-

 Qualcosa del tipo (per geko, sotto IE devi usare ActiveXObject(...)):
Attento al codice che scrivi, dipende dall'implementazione del DOM del W3C.
Ad esempio in Mozilla, e' possibile caricare in modo sincrono *solo* dalla
versione 1.4, se la memoria non m'inganna.
Inoltre stai il documento che si carica dovrebbe essere un XML vero e
proprio.. conforme alle regole sintattiche dell'XML (quindi XHTML, non HTML
4.x) con estensione .xml; e dubito che l'engine del browser ti faccia fare
un appendChild di un nodo XML su un documento HTML, considerandoti il primo
come un HTMLElement.
Eventualmente, bisognerebbe recuperare il codice XML contenuto nel
documentElement del file appena caricato e scriverlo come "stringa"
sull'HTML, qualcosa tipo:
document.body.innerHTML=new XMLSerializer().serializeToString(xmlDoc);
e per IE:
document.body.innerHTML=xmlDoc.xml;
Ho usato il document.body per comodita', ovviamente va bene qualsiasi
riferimento ad un HTMLElement.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"When you have eliminated the impossible, whatever remains,
however improbable, must be the truth." (S.H.)

 come un HTMLElement.
Se viene caricato un XML penso che tu abbia ragione. Ma mi piacerebbe 
provare.
In ogni caso il mio era l'indicazione di una possibile strada. Non 
volevo certo scrivere il codice al posto di Stefano :D
Ciao.
	-Ema-

 Ma mi piacerebbe provare.
Fai qualche test, ed eventualmente fammi sapere.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"Questa e' una lezione difficile, ma importante: Cio' che e' stato, e cio'
che sara', non cambia cio' che e'.
Sta a te decidere poi come prendere questa cosa,se logorarsi per un passato
che non puoi cambiare, invece di prendere tutto il bene che il presente ti
offre." ()

 lavorare all'epoca dei miei esperimenti.
O mi sono fumato il cervello... carico tranquillamente documenti xml 
generati da php (e quindi con estensione php) o da altri sistemi (leggi 
IBM Domino) che non hanno estensione. Sia con IE che con Geko. Il 
Content-Type deve essere settato correttamente ma l'estensione non mi ha 
mai dato alcun problema (e a dire il vero lo troveri stupido).
Nel caso in cui venga caricato da filesystem ... forse ... visto che 
nessuno gli da il Content-type, si basa sull'estensione. Non faccio 
praticamente mai test su filesystem perche' troppo spesso sono ingannevoli.
Per il resto vedo di fare qualche prova e poi ti faccio sapere.
Ciao.
	-Ema-

 praticamente mai test su filesystem perche' troppo spesso sono ingannevoli.
Hai lo stesso risultato anche usando un web-server, se non forzi il
content-type con tecnologia server-side o direttamente da impostazioni del
web-server.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"When you have eliminated the impossible, whatever remains,


 
Io parlavo in generale. Non faccio test in locale perchè ci si puo' 
imbattere in problemi di sicurezza (o meglio non problemi che poi ci si 
ritrova quando si va su server) o comunque comportamenti non del tutto 
identici a quelli che si hanno quando ci si collega al server.
Per tornare alla richiesta originale, e visto che per colpa di ZERO :P 
(ovviamente non e' colpa di ZERO, anzi evita di farci perdere tempo con 
strade sbagliate) la strada da me indicata non si puo' seguire a questo 
punto forse sarebbe meglio usare un oggetto di tipo XMLHttpRequest per 
scaricare il contenuto. A dispetto del nome con questo oggetto (che 
esiste sia in IE che in Geko) si puo' scaricare un po' quello che si 
vuole, salvo il fatto che deve appartenere allo stesso sito ...etc
Per lo meno fino a quando non avranno implementato l'interfaccia 
HTMLDOMImplementation.
Ciao.
	-Ema-

 vuole, salvo il fatto che deve appartenere allo stesso sito...
Attento, anche l'XMLHttpRequest deve essere usato con accortezza.
In alcuni casi, e' capitato usando MSXML che ad un file html recuperato con
l'XMLHttpRequest, ha "troncato" caratteri come accentate e similari.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"Questa e' una lezione difficile, ma importante: Cio' che e' stato, e cio'


 
Troncato? Che versione di MSXML? Errori ne fa anche il browser quando 
non viene settato il codice carattere corretto lato server ma non tronca.
Io ho usato XMLHttpRequest sotto IE per generare richieste SOAP. Sotto 
geko ci sono degli oggetti a posta per SOAP.
Si', sono troppo dispersivo. Porta pazienza. :-D
Ciao.
  -Ema-

 Si', sono troppo dispersivo. Porta pazienza. :-D
Figurati.. io spesso sono troppo meticoloso, quindi dovrai portar pazienza
anche tu.. :D
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"When you have eliminated the impossible, whatever remains,


 
Ok. Pazientiamoci. :-)
Ciao.
	-Ema-

 Ok. Pazientiamoci. :-)
^_^
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"Questa e' una lezione difficile, ma importante: Cio' che e' stato, e cio'


 PDF, ad esempio.
Sei sicuro? Io ho sempre pensato che il server web, nel momento in cui 
vede che deve inviare un documento con una determinata estensione, 
imposti lui il content type corretto in base ad una mappa estensione <-> 
content-type che normalmente tutti i web server hanno.
Ciao.
	-Ema-

 content-type che normalmente tutti i web server hanno.
Con IE/Win, a meno che non abbiano cambiato qualcosa senza dirmi nulla,
dovrebbe funzionare proprio cosi'; all'epoca feci qualche test modificando
sul server la "mappa di estensione" a cui ti riferisci tu, per i documenti
Word.
E' una delle "croci" maledette che ci si deve portare appresso. Il fatto
che lui, indipendentemente da che web-server gli stia fornendo il file, ti
visualizza i documenti Office, ad esempio, se in locale ce l'hai installato
(ovviamente) creando un istanza dell'applicativo dentro il browser.
Infatti, solitamente, deve essere impostato un content-type di tipo
"application/octet-stream" con un content-disposition "attachment" lato
server, per forzarne il download.
Ovviamente, tutti gli altri browser di questo mondo si comportano in modo
corretto.
In IE6, mi pare ma non ne sono sicuro (in quanto ho zippo il file, o
imposto il content-type e content-disposition), dovrebbe esserci il modo di
dire al browser di "chiedere sempre prima di aprire questo tipo di file" o
qualcosa del genere.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
"When you have eliminated the impossible, whatever remains,
