0

캐시 (applicationCache 및 HTML5 캐시 매니페스트를 통해 얻음)를 다른 도메인 (로컬 파일 시스템과 WWW)에 사용할 수 있는지 확인하려고합니다.원격 리소스의 applicationCache 실행 가능성 감지

로컬 캐시 시스템에 캐시 검사 리소스 (게이트웨이 메커니즘이 있음)가 있으며 webview를 통해로드됩니다. 이것은 내가 해결할 수없는 요구 사항입니다.

최근까지이 게이트웨이 로컬 파일은 장치가 온라인 상태인지 확인하고 window.location을 사용하여 원격 리소스로 리디렉션하고 장치가 온라인 상태가 아닌 경우 그래픽을 표시합니다 (또한 로컬 패키지 됨). "이 기능을 사용하려면 인터넷에 연결해야합니다."

그러나 최근에 나는 원격 리소스에 대한 오프라인 지원을 구현했습니다. 그것은 작동합니다. 게이트웨이 파일을 오프라인 상태에서 원격 리소스로 리디렉션하면 캐시에서 원격 리소스를로드합니다.

온라인을 통해 아직 액세스하지 않은 상태에서도 오프라인으로 장치를 사용하려고 할 수 있으므로 캐시가 존재하는지 테스트하기 위해 게이트웨이 코드에 논리를 배치해야합니다. 내가 예상했던 도메인 간 문제가 발생했지만 문제를 해결하는 방법을 모르겠습니다. 나는 (그것이 존재한다면)은 $ 아약스()가 캐시 된 버전을 가져올 것이라는 순진한 희망에 따라

if (window.navigator.onLine === false) { 
    // See if we're able to reach the content (if it's cached, we'll get HTML, else it'll fail) 
    cacheCheck = $.ajax(contentLoc, {async:false}); 

    // the request failed so we have no cache at all. let's just show the offline graphic. 
    if (cacheCheck.status === 0) { // no cache available :(
     $("#launchpage").addClass("offline"); 
    } else { // we have a cache :) 
     redirect(); 
    } 
} else { 
    redirect(); 
} 

내가 쓰고이었다 및 I : 여기

은 내가 시도 코드 반환 된 상태 코드가 오류 상태 코드가 아닌지 확인하기 위해 반환 된 객체를 테스트 할 수 있습니다. 객체가 반환 될 때

그러나이 작동하지 않습니다 "오류 : NETWORK_ERR : XMLHttpRequest의 예외 (101)"

내가 리디렉션하는 것이 안전 여부를 확인하는 데 사용할 수있는 다른 방법이 있습니까? 리디렉션이 실패하면 로컬 이미지를 표시해야합니다 (캐시가 없어서)

답변

0

해결 방법을 찾았습니다. 원격 리소스를 가리키는 iframe을 삽입하고 해당 iframe에서 HTML을로드하는지 (특히 태그에 매니페스트 특성이 있는지 확인) 캐시가 존재한다고 가정하고 리디렉션을 수행 할 수 있는지 확인합니다.

내가 기대 한 바를 얻지 못하면 오류 그래픽이 표시됩니다. 내 구현에서는 iframe이 비동기 적으로로드 될 때까지 기다려야하기 때문에 그래픽은 항상 오프라인 상태 일 때 표시됩니다.

if (window.navigator.onLine === false) { 
// We're offline, so show the offline graphic, in case the future test fails (i.e., no cache available) 
    $("#launchpage").addClass("offline"); 

    // Create an iframe pointing to the canvas. If it loads, we have a cache 
    $('body').append('<iframe id="offlineTest" src="'+contentLoc+'" style="display:none;" />'); 

    $('#offlineTest').bind('load', function() { 
     // See if the result HTML tag has a manifest tag. 
     manifest = $("#offlineTest").contents().find('html').attr('manifest'); 

     if (manifest !== undefined) { // cache is available. 
      redirect(); 
     } 
    }); 
} else { 
    redirect(); 
} 
: 여기

가 작동하도록 예제 코드입니다