GWT - IE не загружает внешние скрипты, включенные в UiBinder - PullRequest
0 голосов
/ 10 ноября 2011

У меня есть некоторые внешние файлы 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.

Ответы [ 2 ]

1 голос
/ 27 декабря 2011

Вы должны указать ScriptInjector, чтобы добавить скрипт в окно верхнего уровня.

ScriptInjector.fromUrl(scriptUrl)
    .setWindow(ScriptInjector.TOP_WINDOW)
    .setCallback(new Callback<Void, Exception>() {
        @Override
        public void onSuccess(Void result) {
            //script loaded OK
        }

        @Override
        public void onFailure(Exception reason) {
            //TODO script injection failed
        }
    }).inject();
1 голос
/ 10 ноября 2011

Элементы скрипта, вставленные с использованием innerHTML (что и используется HTMLPanel), не выполняются.

Вам придется использовать ScriptInjector для динамического внедрения скрипта на вашу страницу.

...