가장 좋은 방법은 무엇입을 감지하는 오프라인 모드에서는 브라우저는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/94757

  •  01-07-2019
  •  | 
  •  

문제

나는 웹 응용 프로그램의 숫자가 있 Ajax 를 구성하는 새로 자신을 너무 자주 모든 내 페이지는(그것의 대시보드의 종류).

지금,나는 원하는 기능을 추가하도록 페이지 없는 경우 인터넷 연결을,현재 페이지의 콘텐츠 바꾸지 않으며 메시지가 페이지에 표시되는 페이지가 오프라인(현재는,이러한 다양한 기기 페이지에서 새로 자신을 찾을 수 있는 연결이 없다,그들의 오래된 데이터가 없어진다).

그래서 무엇이 가장 좋은 방법에 대해 이?

도움이 되었습니까?

해결책

를 처리하기 위한 한 가지 방법이 될 수 있을 확장하 XmlHTTPRequest 체로 명시적인 시간 제한 방식,다음 사용하는 것을 결정하는 경우에 당신은 오프라인 모드에서 작업(즉,이는 브라우저에 대한 자세한 내용은 지원하지 않습니다.온라인).여기에 내가 어떻게 구현되 Ajax 시간 제한 하나의 사이트에서(는 사이트 사용 Prototype 라이브러리).후에 10 초(10,000 밀리초 단위),중단 호출 및 통화의 onFailure 방법입니다.

/**
 * Monitor AJAX requests for timeouts
 * Based on the script here: http://codejanitor.com/wp/2006/03/23/ajax-timeouts-with-prototype/
 *
 * Usage: If an AJAX call takes more than the designated amount of time to return, we call the onFailure
 *        method (if it exists), passing an error code to the function.
 *
 */

var xhr = {
    errorCode: 'timeout',
    callInProgress: function (xmlhttp) {
        switch (xmlhttp.readyState) {
            case 1: case 2: case 3:
                return true;
            // Case 4 and 0
            default:
                return false;
        }
    }
};

// Register global responders that will occur on all AJAX requests
Ajax.Responders.register({
    onCreate: function (request) {
        request.timeoutId = window.setTimeout(function () {
            // If we have hit the timeout and the AJAX request is active, abort it and let the user know
            if (xhr.callInProgress(request.transport)) {
                var parameters = request.options.parameters;
                request.transport.abort();
                // Run the onFailure method if we set one up when creating the AJAX object
                if (request.options.onFailure) {
                    request.options.onFailure(request.transport, xhr.errorCode, parameters);
                }
            }
        },
        // 10 seconds
        10000);
    },
    onComplete: function (request) {
        // Clear the timeout, the request completed ok
        window.clearTimeout(request.timeoutId);
    }
});

다른 팁

navigator.onLine

는 어떻게 해야 당신이 요청하고 있습니다.

당신은 아마이 있는지 확인하려면서 무엇이든 코드를 업데이트하는 페이지입니다.예를 들어:

if (navigator.onLine) {
    updatePage();
} else {
    displayOfflineWarning();
}

그것은 것 같이 대답하신 자신의 질문입니다.면 가젯을 보내 asynch 요청하고 그것은 번지 않 업데이트합니다.는 경우 그들을 충분히 이렇게 표시"페이지가 오프라인에"메시지가 표시됩니다.

HTML5 초안 사양.할 navigator.onLine.모든 브라우저가 지원됩니다.Firefox3Opera9.5 않습니다.

그것은 소리로 하지만 당신은 노력하고 커버하기보다는 문제 해결합니다.면 실패한 요청의 원인이 위젯을 명확한 데이터,당신은 코드를 수정하지 않도록 업데이트하려고 시도하는 위젯 받지 않으면 응답하는 것보다는지 알아보려면 요청이 성공할 것입니다.

Hmm 실제로,지금 내 모습으로 그것은 비트,그것은 조금 더 복잡합니다.의 읽기 이러한 링크 존 레식 블로그Mozilla 사이트.위의 포스터 수 있습니다 또한 좋은 점 당신이 만드는 요청을 어쨌든,그래서 당신이 할 수있을 때 그들은 실패..할 수 있는 훨씬 더 많은 신뢰할 수 있는 방법입니다.

를 호출하는 신뢰할 수있는 목적지,또는 아마 시리즈의 전화,사람을 통과해야 하며 반환하는 경우 사용자는 활성 인터넷 연결-심지어 같은 간단한 토큰 핑 google,yahoo,msn,또는 다음과 같다.는 경우에는 적어도 하나의 돌아온다 녹색,당신이 알고 연결된다.

내가 생각하는 google 기어가 같은 기능을,어쩌면 당신은 수 있는 방법을 확인들은 그렇게 하지 않았습니다.

사용 관련 HTML5API: 온라인/오프라인 상태/이벤트.

가능한 한 가지 해결책이 있는 경우 페이지고 캐시된 페이지가 다른 url 을 보조 url 당신은에 있습니다.는 경우에 당신은 당신의 url 을 캐시된 페이지 당신은 오프라인 모드에서. 블로그 좋은 포인트는 이유에 대해습니다.온라인 돌파

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top