Метод определения успешности последующей навигации - PullRequest
0 голосов
/ 29 октября 2011

У меня есть устаревшее приложение, которое запускается с <a href="http://en.wikipedia.org/wiki/HTML_Application" rel="nofollow">HTA</a>. Я начинаю с file://, а затем сразу же перенаправляет пользователя на веб-URL location.href="http://server/path".

Есть ли способ обнаружить, если навигация прошла успешно или нет (или способ определить, будет ли успешной)

Идеи:

  • XHR к URL-адресу, чтобы получить код ответа HTTP перед переходом к URL-адресу. (Разрешения выдаются, так как сайты не идентичны: file: // -> http://)
  • SCRIPT элемент к известному пути в URL.
  • URL доступа в FRAME. Затем перезагрузите родительский узел, как только он достигнет успеха либо со страницы результатов, либо с HTA.

Примечания:

URL-адрес будет динамической страницей (сервлетом), которая размещается на серверах приложений. Статический контент (изображения и т. Д.) Размещается по-разному. Проверяя изображение, это не гарантирует, что реальный URL работает. Пожалуйста, получите ответы, отражающие эту разницу. (Спасибо!)

Ответы [ 3 ]

0 голосов
/ 29 октября 2011

Если у вас есть доступ к целевой веб-странице, поместите пинг (onload) на веб-странице на сервер вызывающего абонента, регистрирующий успешную загрузку.

В зависимости от выбора технологии, пинг извеб-страница может быть простым вызовом веб-службы на сервере, регистрирующей успешную загрузку в центральном хранилище (т. е. в базе данных).Ваш HTA может регулярно проверять базу данных на предмет статуса загрузки и действовать соответственно.

Вкратце, вам нужно:

  1. Веб-сервис, регистрирующий «статус загрузки» для запроса страницы.Сохранить статус загрузки в центральной базе данных
  2. На веб-странице загрузки вызовите этот веб-сервис после полной загрузки страницы.При ошибке установите статус аналогичным образом.
  3. В вашем HTA создайте таймер, который проверяет (и отображает) статус загрузки.И действует в соответствии с окончательным статусом.
0 голосов
/ 30 октября 2011

Страница CALLING не может напрямую знать, будет ли навигация успешной или неудачной. Для повышения вероятности того, что это произойдет, могут использоваться разные методы, но в конечном итоге это может иметь успех, а может и не быть.

0 голосов
/ 29 октября 2011

Загрузить изображение с сервера и прослушать события onload и onerror. Изображение может быть прозрачным GIF размером в один пиксель.

<img src="http://server/transparent.gif" onload="setServerAvailable(true);" onerror="setServerAvailable(false);" />

Редактировать: Вы можете загрузить страницу в iframe. Вы можете следить за состоянием страницы через JavaScript. Вам не нужно беспокоиться об одной и той же политике происхождения при работе с HTA. Сохраните этот код как HTA, затем загрузите HTA и нажмите кнопку. Вы увидите, что можете изменять содержимое фрейма, даже если оно находится в другом домене:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>Test Same Origin Policy in HTA</title>
        <script type="text/javascript">
            function modifyFrame()
            {
                var fr = document.body.getElementsByTagName("iframe")[0];
                fr.contentWindow.document.body.innerHTML = 
                    "Cross domain scripting works in HTA";
            }
        </script>
    </head>
    <body>
        <iframe src = "/5846319/metod-opredeleniya-uspeshnosti-posleduyschei-navigatsii"></iframe>
        <br /><br />
        <button onclick="modifyFrame()">Modify cross-domain frame content</button>
    </body>
</html>
...