HTML5: использование резервного отклика для проверки подключения пользователя - PullRequest
1 голос
/ 19 декабря 2011

Сейчас я сосредоточен на автономных веб-приложениях с HTML5. Я пришел к тому, что мне нужен надежный метод проверки подключения пользователя, чтобы определить, в данный момент он / она онлайн или офлайн. Поскольку я узнал, что свойство navigator.onLine крайне ненадежно, я нашел очень хороший метод, использующий область Fallback манифеста кэша. Я реализовал два аналогичных решения из двух разных книг, одна из которых «Представляем HTML5» (Лоусон / Шарп), а другая «HTML5: Пропавшее руководство» (Макдональд). Я полагаю, что это проблема кеширования HTTP (я использую Apache и localhost), о которой я не слишком много знаю. Я вставил свой код, это несколько файлов, но очень мало кода.

Адаптированное решение от внедрения HTML5: http://pastebin.com/UGsmnAtK

Адаптированное решение из HTML5 - недостающее руководство: http://pastebin.com/8v5ck3E6

Протестировано с Chrome 16 ...

=== Что я хочу ===

  • запустить приложение с пустым кешем и запустить apache
  • нажмите на кнопку -> отображается предупреждение «Онлайн»
  • остановка apache
  • нажмите на кнопку -> отображается предупреждение «Не в сети»
  • запустить apache
  • нажмите на кнопку -> отображается предупреждение «Онлайн»

=== Что происходит ===

Представляем решение HTML5: - запустить приложение с пустым кешем и запустить apache - нажмите кнопку -> отображается предупреждение «Онлайн» - остановить апач - нажмите кнопку -> отображается предупреждение «Онлайн» - запустить Apache - нажмите кнопку -> отображается предупреждение «Онлайн»

HTML5: отсутствующее решение вручную: - запустить приложение с пустым кешем и запустить apache - нажмите кнопку -> отображается предупреждение «Онлайн» - остановить апач - нажмите кнопку -> отображается предупреждение «Онлайн» - запустить Apache - нажмите кнопку -> отображается предупреждение «Онлайн»

Другие сценарии и варианты использования не работают аналогичным образом. Книги обещают, что вы можете проверить подключение пользователя в любое время, используя его методы. Так что, думаю, я здесь что-то не так делаю. Я бы с радостью принял любые идеи на эту тему.

Ура, Felix

1 Ответ

2 голосов
/ 19 декабря 2011

Проблема в том, что online.js загружается, когда вы нажимаете кнопку с представлением HTML5 или когда страница загружается с HTML5 - отсутствует ручной код и сайт доступен через Apache.В следующий раз сценарии не будут загружены, поскольку они уже находятся в кэше браузера.

Coce из Представление HTML5 выглядит так, как будто оно должно работать, если вы добавите случайное значение в URL скрипта.Что-то вроде:

function testOnline(fn) {
    var script = document.createElement('script');
    script.src = 'online.js?r=' + Math.random();

    window.setOnline = function(online) {
        document.body.removeChild(script);
        fn(online);
    }

    document.body.appendChild(script);
}
...