2014-02-18 4 views
0

В Javascript, что является предпочтительным способом проверки правильности загрузки файла GWT * .nocache.js?Обнаруживать, правильно ли загружен файл GWT * .nocache.js

Background Приложение GWT загружает файл * .nocache.js на простой странице .html-оболочки.

Если пользователь посещает страницу с устаревшим файлом cookie, файл .html отлично загружается из кеша браузера, но файл * .nocache.js не загружается, поскольку пользователю нужен новый токен аутентификации. Поскольку файл .js не загружается, он терпит неудачу. Пользователь видит пустую страницу .html без указания того, что необходимо обновить страницу.

(обратите внимание, что конкретный сбой здесь состоит в том, что файл .js не загружается из-за неправильного типа mime. Уровень auth обрабатывает устаревшие файлы cookie, перенаправляя их на страницу входа. Эта страница является текстовым/html-документом, поэтому браузер отказываются загружать его в тег. Предположим по этому вопросу, что я не могу изменить это поведение в приложении :)

Каков наилучший способ обнаружить это обстоятельство и, например, принудительно обновить страницу.

Обратите внимание, что жесткое обновление приведет к извлечению страницы .html с сервера, которая будет перенаправлена ​​на вход в систему. Один из подходов заключается в том, чтобы сообщить браузеру не кэшировать файл .html, но я бы предпочел другое решение, которое позволяет кэшировать файл .html.

ответ

1

Учитывая, что вы не можете изменить ситуацию в своем приложении, я отвечу только на ваш вопрос.

Вы нужны JavaScript в вашем page.html для того, чтобы проверить, был ли загружен сценарий GWT по истечении определенного времени:

<head> 
     <script> 
     setTimeout(function() { 
      if (!document.getElementById("my_module_name")) { 
       window.location.reload(); 
      } 
     }, 4000) 
     </script> 
     <script language="javascript" src="my_module_name.nocache.js"></script> 
    </head> 

В случае, если вы используете в Iframe на основе линкер (стандарт, xsiframe), то .nocache.js создает iframe для загрузки соответствующей перестановки и дает ему имя модуля, поэтому проверка наличия этого элемента через некоторое время достаточно, чтобы узнать, загружено ли приложение.

Вы можете также проверить наличие особенных свойств, которые GWT устанавливает в окно, как window.__gwt_activeModules

+0

Спасибо, окно .__ gwt_activeModules. – frankadelic

0

Как правило, сначала загружается приложение GWT, а затем выполняется аутентификация. Вы можете использовать точку разделения, если хотите, загрузить только страницу входа. Затем, после подтверждения подлинности, вы загружаете другие части своего приложения.

Я никогда не видел сценарий, когда проверка подлинности выполняется до загрузки страницы. Может быть, вы можете объяснить, почему вы это сделали.

Что касается вашего вопроса, вам нужен JavaScript, чтобы определить, был ли загружен еще один JavaScript, но это решение добавляет ненужный уровень сложности.

+0

Короткий ответ: Войти обрабатывается одной странице SSO, которая не зависит от приложения GWT. Приложение GWT является одним из нескольких в корпоративной интрасети. – frankadelic

+0

Я понимаю это часть. Я не понимаю, как вы можете загрузить HTML-страницу, но не оставляйте один скрипт. Какой код принимает это решение и где этот код выполняется? –

+0

HTML-страница загружается, потому что браузер кэшировал ее. Скрипт nocache.js не кэшируется, поэтому для его загрузки требуется поражение веб-сервера (что требует проверки подлинности). – frankadelic

Смежные вопросы