2016-02-12 12 views
6

MYディレクトリは次のとおりです。サービスワーカーの有効範囲を登録する方法service_worker.jsがあるディレクトリの1つ上に

public_html/ 
sw/ 

「SWは/」私はすべてのサービス労働者を配置する場所であるが、その後、「public_htmlの/」内のすべてのファイルに適用範囲で、それらのサービスの労働者を持っています。私はスコープのこの種のを許可するにはどうすればよい

JS

<script> 
if ('serviceWorker' in navigator) { 
    navigator.serviceWorker.register('sw/notifications.js', { scope: '../sw/' }).then(function(reg) { 
    // registration worked 
    console.log('Registration succeeded. Scope is ' + reg.scope); 
    }).catch(function(error) { 
    // registration failed 
    console.log('Registration failed with ' + error); 
    }); 
}; 
</script> 

答えて

12

max scope for a service worker is where it is located。つまり、サービスワーカーの新しい最大スコープに特別なヘッダーService-Worker-Allowedを設定しない限り、/sw/にあるサービスワーカーをscope: '/public_html/'に登録することはできません。

サービスワーカーにサービスを提供するときに、次のように設定し、このヘッダを追加することができれば、要約:

Service-Worker-Allowed: /public_html/ 

ない場合は、スコープ上のいくつかの場所でSWを配置する必要があります。

4

登録オプションオブジェクト(navigator.serviceWorker.register()の2番目のパラメータ)のscopeプロパティを、サービスワーカーの有効範囲にするURLに変更します。あなたの場合、これは../public_htmlです。

// ... 
navigator.serviceWorker.register('sw/notifications.js', { scope: '../public_html/' }) 
// ... 

オプションオブジェクトが設けられ、あるいは全くscope性質を持っていないされていない場合、パラメータは、(ServiceWorkerスクリプトに対して)./をデフォルトとすること。また

、任意の現在の原点以外originwill reject the registration Promise with a SecurityError exception.


参照しscope設定:

https://www.w3.org/TR/service-workers/#navigator-service-worker-register

https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/register#Parameters

+3

スコープが許可されたスコープ外にあることを示すエラーがスローされます。他の回答ごとにヘッダーも設定する必要があります。 –

関連する問題