Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Usage of ScriptInjector in GWT

I want to use javascript library in java source code. I read sth about it and I read, that I should use ScriptInjector. This class has 2 inner classes: ScriptInjector.FromString and ScriptInjector.FromUrl. I want to load javascript library from local file, so I should use from string. How to do it?

ScriptInjector.fromString("myLibrary.js");

does not work. Where to add library?

like image 348
user3240883 Avatar asked Jul 07 '14 12:07

user3240883


2 Answers

1) fromUrl - creates script tag with specified src attribute and appends it to the page. E.g.

ScriptInjector.fromUrl("http://example.com/my-script.js").inject();

will simply produce:

<script type="text/javascript" src="http://example.com/my-script.js" />

You can host your files on the web site and inject each of them on demand

2) fromString - creates script tag with specified body of the script, so: ScriptInjector.fromString("alert('Injected!')").inject(); will give

<script type="text/javascript">
alert('Injected!')
</script>

In this case JS code is a part of your compiled GWT code and browser doesn't require to load it with separate request. I think it is possible to include native JS file into compiled output with TextResource. So you need following:

Define resources

public interface JsResources extends ClientBundle {
final JsResources INSTANCE = GWT.create(JsResources.class);
@Source("first.js")
TextResource firstScript();
@Source("second.js")
TextResource secondScript();
}

Inject required script

ScriptInjector.fromString(JsResources.INSTANCE.firstScript().getText()).inject();
like image 92
udalmik Avatar answered Oct 22 '22 21:10

udalmik


To use .fromString() you'd have to load the JS into a String and pass that.

If you need to load the script using the .fromUrl() you'll have to put it somewhere "Internet" accessible, since the inject() ends up in

private static native void nativeSetSrc(JavaScriptObject element, String url) /*-{
  element.src = url;
}-*/;

(See it here)

So: Extract or otherwise expose the script to your webserver.

Cheers,

like image 28
Anders R. Bystrup Avatar answered Oct 22 '22 22:10

Anders R. Bystrup