2011-12-19 9 views
1

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

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

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

Испытан с Chrome 16 ...

=== То, что я хочу ===

  • запустить приложение с пустым кешем и работает apache
  • нажмите на кнопку -> предупреждение «Интернет» отображается
  • остановка апач
  • нажмите на кнопку -> предупреждение «Offline» отображается
  • начало апач
  • нажмите кнопку -> Сигнал «Online» показано

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

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

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

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

Приветствие, Felix

ответ

2

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

Кокс от Introducing 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); 
} 
+0

Привет, Морис, большое спасибо за ваш ответ, вы действительно очень помогли мне! Я просто попытался добавить строку запроса, и это действительно работает! Каждый щелчок на кнопке вызывает запрос GET на 'online.js'. Может быть, я должен узнать больше обо всех этих методах Apache. Первый пост в stackoverflow, немедленный успех! Cheers, Felix – Felix

+1

Привет, Феликс, ничего конкретного Apache об этом, я просто немного изменил URL-адрес, чтобы избежать использования кэша онлайн-браузера. Пожалуйста, примите в качестве ответа, чтобы помочь другим, кто сталкивается с этой проблемой. – Maurice