У меня есть некоторые внешние файлы Javascript в моем приложении GWT, которые я хочу загрузить, только когда пользователь получает доступ к разделу, который требует их.Я включил файлы JS в страницу UiBinder следующим образом:
<g:HTMLPanel>
<script src="blah.js"/>
</g:HTMLPanel>
Файлы не обязательно будут загружаться сразу после загрузки представления, поэтому при загрузке представления я проверяю наличие исключения, указывающегочто внешний код недоступен и повторите попытку, пока представление не будет создано без исключения.
Это работает в Firefox, но не работает в IE7 / IE8.Я использовал AJAX Edition, чтобы отследить, что происходит в IE, и был сделан запрос на файл, но он ничего не загружает, размер равен 0. Журналы доступа к веб-серверу не показывают, что файл был запрошен.
Есть идеи, что происходит?
Или есть лучший способ сделать это?Проведенное мной до сих пор расследование не указывает на то, что у GWT есть удобный способ сделать это.
Обновление:
Хотя мы еще не на версии 2.4, просто попытайтесь скопировать исходные файлы, необходимые для ScriptInjector, и попытались использовать это в соответствии с предложениемТомас.Файлы JS загружаются правильно в обоих браузерах, но я получаю исключение '$ wnd.xxxx is undefined', указывающее, что ссылки во внешнем скрипте не могут быть найдены.Я не пытаюсь загрузить свой виджет до тех пор, пока вызов inSuccess () не вернется из сценария внедрения - поэтому мой код выглядит примерно так:
ScriptInjector.fromUrl("../xxxx.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.");
MyWidget widget = new MyWidget();
client.onSuccess(widget); // adds the widget to the view
}
}).inject();
Я также не вижу ссылок на файлы JS, добавленные вDOM в Firebug, но мне интересно, если это так, потому что они добавляются в DOM части GWT страницы, а не в фактический index.jsp.