Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    200

    (JSP) Chiamata dinamica script esterni

    Ciao a tutti.

    Ho una necessità ma non sò come risolvere il problema.

    Qualcuno sà come posso leggere dinamicamente uno script (.js) esterno?

    Con il termine dinamicamente intendo dire che il nome del file script da leggere deve essere contenuto in una variabile anzichè in una stringa (riferimento statico).

    Ho provato semplicemente a sostituire la stringa con una variabile ma sembra non funzionare:

    var variabile = path del file .js

    <SCRIPT language="Javascript" src=variabile> </SCRIPT>

    Qualcuno può darmi una mano e farmi capire se eventualmente ci possano essere delle soluzioni?

    Grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Anzitutto un chiarimento. Vuoi un codice JS (javascript) oppure JSP (java server pages)? le cose sono molto diverse.

    Per chiamare dinamicamente uno script, la cosa e` possibile, se non vuoi usare DTD strict, altrimenti diventa complicatissimo.
    codice:
    <script type="text/javascript">
    var variabile = path del file .js
    
    document.write("<scr"+"ipt type='text/javascr"+"ipt' "+
    "src='"+variabile+"'>&amp;nbsp;</scr"+"ipt>");
    </script>
    Da inserire tipicamente nella head del file, e non inserire dentro funzioni.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    200
    Sì Mich, scusa. Mi riferivo A Javascript.

    Io a dire la verità avevo già provato ad usare la tecnica utilizzata per la creazione dinamica degli oggetti. Tuttavia non mi ha funzionato. Ho utilizzato la seguente.

    var P1="<SCRIPT language='Javascript' src='"
    var P2= path nome file.js
    var P3= "'> </SCRIPT>"

    Object = P1 + P2 + P3

    document.write=(Object)

    Ora, proverò senz'altro il metodo che mi hai proposto (sarebbe meraviglioso se funzionasse perchè potrei aumentare notevolmente la modularità del progetto sorgente).

    Tuttavia, non capisco bene la differenza tra la tua proposta e ciò che intentai con il mio document.write.

    Perchè ad esempio hai diviso la stringa "script" in "scr" + "ipt" e via di seguito?

    Mi spiegheresti l'arcano?

    Infinitamente grato

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Se in un document.write ci metti un tag <script> o peggio ancora un tag </script> il browser interpreta tale tag come fine dello script e tutto il resto come porcheria.

    Per lo stesso motivo devi spezzare i tag nella proposta di script dell'ultimo post.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    200
    Bhè, in realtà l'istruzione che mi hai dato è molto particolare ed ingegnosa e richiederebbe maggiori spiegazioni.

    Comunque, oltre ad utilizzarla cercherò di fare delle ricerche al fine di comprenderla esaurientemente anche perchè mi chiedo chi possa averla ideata visto che sui testi non ho ancora letto niente di simile riguardo le chiamate dinamiche.

    Più che un'istruzione è un espediente.

    Non credo che in un testo Js esista un paragrafo "Chiamate dinamiche" con tale soluzione (ma forse mi sbaglio). Comunque proverò a cercare ancora.

    Nel frattempo mi metto subito al lavoro per operare le dovute modifiche ai miei sorgenti.

    Grazie

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    200
    Facendo un po' di prove, ho appena scoperto che l'interprete JS del browser nell'eseguire l'istruzione document.write(.........) non considera assolutamente il solo tag "</script>".

    Per tanto la "document.write" di cui sopra funziona anche se scritta così:

    <script type="text/javascript">

    var variabile = path del file .js

    document.write("<script type='text/javascript' " +
    "src='" + variabile + "'> </scrip" + "t>");

    </script>

    La mia impressione è che questo modo di chiamare dinamicamente uno script esterno non fa parte della documentazione ufficiale.

    Credo cioè che non si sia voluto dare la possibilità di eseguire istruzioni Js in una "document.write" (che tra l'altro, almeno ufficialmente è da ritenersi un modo per eseguire esclusivamente la creazione dinamica di elementi Html).

    Tuttavia, la funzione dell'interprete Js preposta ad interpretare la document.write, probabilmente esegue ogni tipo di istruzione che può essere ammessa in un file HTML (tag "<Script" incluso).

    Quindi, per evitare che possa essere eseguita una "script" i programmatori dell'interprete JS hanno semplicemente messo un controllo sull'esistenza del tag "</script>" inibendo l'esecuzione della stessa document.write in sua presenza.

    Ciò è anche logicamente comprensibile in quanto per eseguire le istruzioni di creazione di un elemento Html poste nella document.write, all'interprete Js è sufficiente fare una chiamata al modulo che interpreta l'HTML.

    Un semplice ed economico controllo logico (circa l'esistenza della stringa "</script>") messo dall' interprete JS a monte della chiamata all'interprete HTML si è ritenuto essere sufficiente per inibire l'esecuzione delle istruzioni JS impedendo semplicemente in questo caso la chiamata all'interprete HTML.

    Evidentemente però i programmatori dell'interprete JS essendosi trovati nelle condizioni di dover effettuare, per realizzare delle loro applicazioni personali, delle chiamate dinamiche, ben sapevano come superare l'ostacolo.
    Qualcuno poi, leggendo casualmente quel codice sorgente Html, deve essere rimasto contento di aver scoperto lo stratagemma e lo ha utilizzato a sua volta diffondendone la conoscienza.

    Ma questa è solo una mia personalissima opinione.

    Ciao a tutti.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Non so cosa dire di tutte le tue elucubrazioni. Mi sembra che stai facendo dire/pensare ad altri cose che non avevano intenzione di dire/pensare.

    Comunque quel trucco e` know-how di questo forum da diverso tempo (almeno tre anni); non so chi lo abbia "importato" o inventato.

    Il problema non e` l'interprete JS (che non interpreta i tag HTML), ma dell'interprete HTML, che quando trova un tag <script>, passa ad un altro interprete il codice fino al successivo </script>.

    Comunque hai ragione quando dici che non fa parte della documentazione ufficiale: infatti non credo si possa usare con una DTD strict. E` un trucco, non una soluzione.
    Se vuoi fare le cose bene, devi agire a livello di server (dove queste cose possono essere eseguite senza problemi).
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    200
    La mia era solo una ipotesi basata su considerazioni logiche e molti anni d'esperienza nel settore informatico riguardante la progettazione di sistemi informativi.
    Non ho mai quindi pensato d'indurre chicchessìa a credere che la mia fosse qualcosa di più che un opinione.

    Ciò che mi sembra ravvisare dal comportamento di quella "document. write" è quanto segue.

    1) L'interprete Js esegue un controllo logico sul contenuto della stringa tra le parentesi.

    2) Se trova la sequenza "</Script>" non chiama l'interprete HTML
    altrimenti chiama l'interprete HTML.

    Se l'interprete HTML viene chiamato questo:

    1) Esamina il contenuto della stringa passata dall'interprete JS

    2) Se trova la sequenza "<script" chiama l'interprete JS
    altrimenti cerca di eseguire i comandi interpretandoli come HTML.

    L'interprete Js chiamato:

    1) Esegue i comandi javascript
    2) Ricede il controllo all'interprete HTML
    3) L'interprete HTML continua ad esaminare la stringa ed eventualmente ad eseguire i comandi HTML contenuti (reitera i punti 1 e 2)

    4) L'interprete HTML finisce di elaborare la stringa e ricede il controllo all'interprete Js.

    5) L'interprete Js continua a elaborare le altre istruzioni eventualmente presenti e successive alla "document.write" fino ad incontrare il tag </script>.

    Per cui, credo che sia l'interprete JS che in presenza della sequenza di caratteri "</script>" inibisce la chiamata all'interprete HTML.

    Comunque, rinnovo i miei ringraziamenti per una soluzione che snellirà notevolmente il prodotto finale.
    Chissà, magari i progettisti dell'interprete JS stanno già lavorando per introdurre un istruzione specifica per le chiamate dinamiche.

    Solo una curiosità.
    Perchè dici che su "lato server" non avrei avuto alcuna difficoltà?

    Ciao.

  9. #9
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Non so se ti servirà.... x IE 6.0
    Uso i popup ma penso sia fattibile con degli iframes.

    File : : test955.html
    codice:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
    
    <html> 
    <head> 
    <title>Untitled</title> 
    <script language="JavaScript" type="text/javascript"> 
    <!-- 
    var loadedFile; 
    var loadedRef; 
    function loadFile(aFileName) { 
     loadedFile = aFileName; 
     loadedRef  = window.open('test955b.html',null,"height=0, width=0, menubar=no, toolbar=no,resizable=no,scrollbars=no" ); 
    } // function loadFile(aFileName) 
    
    function play() { 
     //------------ Pour savoir sur quelle page on se trouve 
     //             j'ai créé dans chaque page une fonction getPage 
     if (loadedRef.getPage() == 'a') { 
      loadedRef.a(); 
     } else { 
      loadedRef.b(); 
     } 
    } 
    //--> 
    </script> 
    
    </head> 
    <body onunload="loadedRef.window.close()"> 
    
    Clica su uno dei 2 pulsanti e poi clicca XXXX 
    <input type="button" value="Carica file 1" onclick="loadFile('test955c.js')"> 
    <input type="button" value="Carica file 2" onclick="loadFile('test955d.js')"> 
    <input type="button" value="XXXX" onclick="play()"> 
    
    
    </body> 
    </html>
    File : test255b.html
    codice:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
    
    <html> 
    <head> 
    <title>Untitled</title> 
    
    </head> 
    <body onload="window.resizeTo(0,0);window.moveBy(-1000, -1000);document.getElementById('script1').src=window.opener.loadedFile"> 
    <script language="JavaScript" id="script1" type="text/javascript" ></script> 
    </body> 
    </html>
    File : test955c.js
    codice:
    function a() { 
     alert('page a'); 
    } 
    function getPage() { 
     return 'a'; 
    }

    Fichier : test955d.js
    codice:
    function b() { 
     alert('page b'); 
    } 
    function getPage() { 
     return 'b'; 
    }

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    200
    Grazie Badaze. Mi sono salvato il sorgente cosicchè con calma possa studiarmelo.
    Sicuramente in qualche modo sono sicuro avrò occasione di utilizzare gli spunti in esso contenuti.

    Grazie ciao.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.