GWT inject script element into the html file

2020-05-27 10:53发布

On my gwt project. i have a script that call the dictionary:

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

instead of writing this script element in the html file. i want to inject it into the html from the entry point, on the module load.

how can i do it?

标签: gwt
4条回答
SAY GOODBYE
2楼-- · 2020-05-27 11:16

You could simply add a <script> element in your *.gwt.xml file.

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

onModuleLoad will only be called once the script is loaded (as if you had it in your html page).

查看更多
Anthone
3楼-- · 2020-05-27 11:19

Use com.google.gwt.core.client.ScriptInjector, since it was created specifically for stuff like this

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();
查看更多
爱情/是我丢掉的垃圾
4楼-- · 2020-05-27 11:28

The answers form jusio, Dom and Thomas Broyer are all valid here. In my particular case, I was looking to inject a series of polyfill scripts into GWT for some IE8 support we needed when running native JS code. The polyfill scripts needed to be available to the GWT iframe's window context - NOT the host page. To do that, using ScriptInjector was the correct approach as it attaches the script at that level. You can make ScriptInjector install the scripts to a host window by using setWindow(TOP_WINDOW). Adding scripts with the <script> tag in my *.gwt.xml file seemed to be attaching to the host window as did using @Dom's approach.

查看更多
家丑人穷心不美
5楼-- · 2020-05-27 11:39

Basically you inject the script element in your 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);

The browser will automatically load it as soon as it's injected.

查看更多
登录 后发表回答