#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
означает файл на веб-сайте?