Использование ScriptInjector в GWT

#java #javascript #gwt

#java #javascript #gwt

Вопрос:

Я хочу использовать библиотеку javascript в исходном коде java. Я прочитал кое-что об этом, и я прочитал, что я должен использовать ScriptInjector . Этот класс имеет 2 внутренних класса: ScriptInjector.FromString и ScriptInjector.FromUrl . Я хочу загрузить библиотеку javascript из локального файла, поэтому я должен использовать from string. Как это сделать?

 ScriptInjector.fromString("myLibrary.js");
  

не работает. Куда добавить библиотеку?

Комментарии:

1. Я попробовал это: simon.pamies.de/archives/194 , но это не работает.

Ответ №1:

1) fromUrl — создает script тег с указанным атрибутом src и добавляет его на страницу. Например.

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

просто создаст:

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

Вы можете разместить свои файлы на веб-сайте и внедрять каждый из них по запросу

2) fromString — создает script тег с указанным телом скрипта, так что: ScriptInjector.fromString(«alert(‘Введено!’)»).inject(); выдаст

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

В этом случае JS-код является частью вашего скомпилированного GWT-кода, и браузеру не требуется загружать его отдельным запросом. Я думаю, что можно включить собственный JS-файл в скомпилированный вывод с помощью TextResource . Итак, вам нужно следующее:

Определение ресурсов

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

Внедрить требуемый скрипт

 ScriptInjector.fromString(JsResources.INSTANCE.firstScript().getText()).inject();
  

Комментарии:

1. «Я думаю, что можно включить собственный JS-файл в скомпилированный вывод с помощью TextResource». Я могу подтвердить это: мне только что удалось переписать свой собственный код так, как вы предложили выше, и это работает.

Ответ №2:

Для использования .fromString() вам нужно было бы загрузить JS в строку и передать это.

Если вам нужно загрузить скрипт с помощью .fromUrl() , вам придется поместить его куда-нибудь, доступного «Интернету», поскольку inject() он заканчивается в

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

(Смотрите это здесь)

Итак: Извлеките или иным образом предоставьте скрипт вашему веб-серверу.

Приветствия,

Комментарии:

1. Я записал: ScriptInjector.fromUrl(file://myLibrary.js ).inject(); Библиотека все еще не введена, потому что элементы из этой библиотеки недоступны.

2. Три косых черты (имя хоста может находиться между цифрами 2 и 3). Путь (после 3-й косой черты) должен быть правильным. Не забывайте заключать в кавычки.

3. Та же проблема. У меня есть файл в том же пакете, что и class, который загружает этот файл.

4. Я немного покопался и в итоге отредактировал ответ.

5. То есть файл может быть загружен только с помощью метода fromString() ? src означает файл на веб-сайте?