1

나는 가능한 모든 가이드 및 예제 다음, 진보적 인 웹 응용 프로그램을 작성했습니다 "오프라인 작동하지 않습니다"하지만 어떤 이유로 나는 Add to homescreen 버튼, 나는이 신비 오류가 계속 클릭 할 때 :프로그레시브 웹 응용 프로그램 오류

Site cannot be installed: does not work offline 

내 PWA와 예제의 주된 차이점은 광산이 순수하게 도메인의 비 루트 경로에서 실행된다는 것입니다. 따라서 다양한 위치의 구성에 추가 경로를 추가해야만 응용 프로그램이 비 루트 폴더.

Google Lighthouse 사이트는별로 도움이되지 않으며 매우 유사한 메시지를 제공합니다.

누구든지이 오류의 원인을 제안 할 수 있습니까?

답변

4

그래서 몇 시간이 걸렸지 만 서비스 전문가에게 연결할 때 클라이언트 JavaScript에서 지정해야하는 필수 매개 변수는 scope입니다 (루트가 실행되지 않으면 /) 통로.

if ('serviceWorker' in navigator) { 
    navigator.serviceWorker.register('sw.js?v2', { 
     scope: '.' // <--- THIS BIT IS REQUIRED 
    }).then(function(registration) { 
     // Registration was successful 
     console.log('ServiceWorker registration successful with scope: ', registration.scope); 
    }, function(err) { 
     // registration failed :(
     console.log('ServiceWorker registration failed: ', err); 
    }); 
} 

현재 작업 제품을 볼 수 있습니다

나는 내 고통이 다른 누군가를 구할 수 있기를 바랍니다.

+0

필수 사항은 아닙니다. 그러나 당신이 PWA를 그 폴더로 '조사하는'것처럼 보입니다. 그래서 범위를 지정해야했습니다. 해당 오류가 발생하는 이유는 해당 범위에 대한 서비스 작업자 페치 이벤트 처리기가 없기 때문입니다. 이 게시물은 해당 요구 사항에 대해 이야기합니다. https://love2dev.com/blog/is-your-progressive-web-app-may-not-prompting-the-customer-to-add-to-home-screen/ –

+0

It 's 앱 범위를 지정할 때 호출 스크립트의 범위를 지정해야 할 때 매니페스트에 범위를 추가해도 작동하지 않으면 웹 사이트 코드의 serviceWorker에 대한 호출이 기본값으로 설정된다는 문서화 된 요구 사항 (사이트에서도 아님) 루트 범위를 지정하고 매니페스트를 무시합니다. 이것은 ServiceWorker 구현의 버그 일 수 있습니다. _all_ 내 웹 사이트 파일이 상대 디렉토리에 저장되어있는 경우 앱을 절대적으로 범위 지정해야 할 필요는 없으며 배치를 보조 위치로 방해하기 만하면됩니다. – StampyCode

+1

@ChrisLove 사실, 방금 범위를'.'로 설정할 수 있다는 것을 알았습니다. 따라서 클라이언트 스크립트에서 매개 변수가 여전히 필요하지만 적어도 이제는 절대 경로를 모르는 상태 일 수 있습니다. – StampyCode

관련 문제