2012-01-29 18 views
10

Nel mio progetto gwt. Ho uno script che chiama il dizionario:GWT inserisce l'elemento di script nel file html

<script type="text/javascript" src=conf/iw_dictionary.js></script> 

invece di scrivere questo elemento di script nel file html. voglio iniettarlo nell'html dal punto di ingresso, sul carico del modulo.

come posso fare?

+0

Una domanda simile è stata anche posta: [GWT: caricamento differito di risorse JS esterne] (http://stackoverflow.com/q/7968831/320399) – blong

risposta

11

Usa com.google.gwt.core.client.ScriptInjector, da quando è stato creato appositamente per cose come questa

ScriptInjector.fromUrl("conf/iw_dictionary.js").setCallback(
    new Callback<Void, Exception>() { 
    public void onFailure(Exception reason) { 
     Window.alert("Script load failed."); 
    } 
    public void onSuccess(Void result) { 
     Window.alert("Script load success."); 
    } 
    }).inject(); 
+0

La classe 'ScriptInjector' è disponibile in GWT_V2.7.0. Se devo iniettare un file javascript con GWT_V.1.x allora è possibile o no? –

+0

È possibile, ma dovrai utilizzare le soluzioni delle risposte di seguito. Puoi usare la risposta fornita da Dom (ma dovrai usare la vecchia API per la creazione degli elementi) o la risposta di Thomas Broyer (non sono sicuro al 100% se funzionasse per GWT 1.XX) – jusio

+0

Sto implementando la protezione CSRF nella mia applicazione web. Ho fatto tutta la configurazione richiesta e posso vedere il token generato/iniettato nell'intestazione della richiesta. Lasciatemi un po dire l'architettura dell'applicazione, dispongo di pagine JSP che effettuano chiamate ai servizi utilizzando Ajax per ottenere i dati e visualizzarli nell'interfaccia utente. La mia domanda qui è "Possiamo proteggere le chiamate di servizio anche con la guardia CSRF?" Se è possibile, come posso farlo perché non sta andando alla classe CsrfGuardFilter.java quando eseguo il debug dell'esecuzione. Grazie per il vostro aiuto. –

5

Fondamentalmente si inietta l'elemento script nella vostra onModuleLoad():

Element head = Document.get().getElementsByTagName("head").getItem(0); 
    ScriptElement sce = Document.get().createScriptElement(); 
    sce.setType("text/javascript"); 
    sce.setSrc("conf/iw_dictionary.js"); 
    head.appendChild(sce); 

Il browser caricherà automaticamente non appena è iniettato.

+1

Utile per quelli di noi che utilizzano 2.3 (ScriptInjector è introdotto in 2.4) –

+0

Sto implementando la protezione CSRF nella mia applicazione web. Ho fatto tutta la configurazione richiesta e posso vedere il token generato/iniettato nell'intestazione della richiesta. Lasciatemi un po dire l'architettura dell'applicazione, dispongo di pagine JSP che effettuano chiamate ai servizi utilizzando Ajax per ottenere i dati e visualizzarli nell'interfaccia utente. La mia domanda qui è "Possiamo proteggere le chiamate di servizio anche con la guardia CSRF?" Se è possibile, come posso farlo perché non sta andando alla classe CsrfGuardFilter.java quando eseguo il debug dell'esecuzione. Grazie per il vostro aiuto. –

3

Si potrebbe semplicemente aggiungere una <script> element in your *.gwt.xml file.

<script src='conf/iw_dictionary.js' /> 

onModuleLoad sarà chiamato solo una volta lo script viene caricato (come se si fosse nella vostra pagina html).

+0

Come ho capito da te che devo mettere '