2012-01-29 10 views
10

En mi proyecto gwt. Tengo un script que llama al diccionario:GWT inject script element en el archivo html

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

en lugar de escribir este elemento de script en el archivo html. Quiero inyectarlo en el html desde el punto de entrada, en la carga del módulo.

¿cómo puedo hacerlo?

+0

También se hizo una pregunta similar: [GWT: carga diferida de recursos JS externos] (http://stackoverflow.com/q/7968831/320399) – blong

Respuesta

11

Uso com.google.gwt.core.client.ScriptInjector, desde que fue creado específicamente para este tipo de cosas

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 clase 'ScriptInjector' está disponible en GWT_V2.7.0. Si tengo que inyectar un archivo javascript con GWT_V.1.x, ¿es posible o no? –

+0

Es posible, pero deberá usar soluciones de las respuestas a continuación. Puede usar la respuesta provista por Dom (pero deberá usar la API anterior para la creación del elemento) o la respuesta de Thomas Broyer (no estoy 100% seguro si estaba trabajando para GWT 1.XX) – jusio

+0

Estoy implementando la protección CSRF en mi aplicación web He hecho toda la configuración requerida y puedo ver el token generado/inyectado en el encabezado de la solicitud. Permítame decir que la arquitectura de la aplicación un poco, tengo las páginas JSP que hace la llamada a los servicios utilizando Ajax para obtener los datos y mostrar en la interfaz de usuario. Mi pregunta aquí es "¿Podemos proteger las llamadas de servicio también con CSRF guard?" Si es posible, ¿cómo puedo hacer esto porque no irá a la clase CsrfGuardFilter.java cuando estoy depurando la ejecución? Gracias por su ayuda. –

5

Básicamente se inyecta el elemento de secuencia de comandos en su 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); 

El navegador se cargará automáticamente tan pronto como se le inyecta.

+1

Útil para aquellos de nosotros que usamos 2.3 (ScriptInjector se presenta en 2.4) –

+0

Estoy implementando CSRF guard en mi aplicación web. He hecho toda la configuración requerida y puedo ver el token generado/inyectado en el encabezado de la solicitud. Déjeme decirle un poco la arquitectura de la aplicación, tengo páginas JSP que hacen llamadas a servicios usando Ajax para obtener los datos y mostrarlos en la interfaz de usuario. Mi pregunta aquí es "¿Podemos proteger las llamadas de servicio también con CSRF guard?" Si es posible, ¿cómo puedo hacer esto porque no irá a la clase CsrfGuardFilter.java cuando estoy depurando la ejecución? Gracias por su ayuda. –

3

Usted simplemente puede añadir un <script> element in your *.gwt.xml file.

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

onModuleLoad sólo se llama una vez que se carga la secuencia de comandos (como si tuviera en su página html).

+0

Según tengo entendido, tengo que poner '

Cuestiones relacionadas