--- title: ServiceWorkerContainer.register() slug: Web/API/ServiceWorkerContainer/register tags: - API - Method - Reference - Service Workers - Service worker API - ServiceWorker - ServiceWorkerContainer - register translation_of: Web/API/ServiceWorkerContainer/register ---
{{domxref("ServiceWorkerContainer")}} インターフェイスの register() メソッドは、所与の scriptURL の {{domxref("ServiceWorkerRegistration")}} を作成または更新します。
成功した場合、サービスワーカー登録は、提供されたスクリプト URL(scriptURL)をスコープ(scope)に結び付け、その後スコープをナビゲーションでの照合に使用します。 このメソッドは、制御されたページから無条件に呼び出すことができます。 つまり、アクティブな登録があるかどうかを最初に確認する必要はありません。
スコープの意味と使用法についてはしばしば混乱があります。 サービスワーカーは自身の場所よりも広いスコープを持つことはできないため、デフォルトよりも狭いスコープが必要な場合にのみ、scope オプションを使用してください。
serviceWorkerContainer.register(scriptURL, options)
.then(function(serviceWorkerRegistration) { ... });
scriptURLoptions {{optional_inline}}scope: サービスワーカーの登録スコープを定義する URL を表す {{domxref("USVString")}}。 つまり、サービスワーカーが制御できる URL の範囲です。 これは通常、相対 URL です。 これは、アプリケーションのベース URL を基準にしています。 デフォルトでは、サービスワーカー登録の scope 値は、サービスワーカースクリプトが配置されているディレクトリになります。 動作の詳細については、例のセクションを参照してください。{{domxref("ServiceWorkerRegistration")}} オブジェクトで解決する {{jsxref("Promise")}}。
ここで説明する例は、サービスワーカーのスコープがページにどのように適用されるかをよりよく理解するために、まとめて理解する必要があります。
次の例では、scope(を省略した場合)のデフォルト値を使用しています。 この場合、サービスワーカーは example.com/index.html とその下のページ(example.com/product/description.html など)を制御します。
if ('serviceWorker' in navigator) {
// デフォルトのスコープを使用して、
// サイトのルートでホストされるサービスワーカーを登録します。
navigator.serviceWorker.register('/sw.js').then(function(registration) {
console.log('サービスワーカー登録成功:', registration);
}, /*catch*/ function(error) {
console.log('サービスワーカー登録失敗:', error);
});
} else {
console.log('サービスワーカーをサポートしていません。');
}
次のコードは、サイトのルートにあるページに含まれている場合、上記の例とまったく同じページに適用されます。 スコープが含まれている場合は、ページの場所をベースとして使用することに注意してください。 あるいは、このコードが example.com/product/description.html のページに含まれている場合、'./' のスコープは、サービスワーカーが example.com/product の下のリソースにのみ適用されることを意味します。 example.com のすべてに適用されるサービスワーカーを example.com/product/description.html で登録する必要がある場合は、上記のようにスコープを省略します。
if ('serviceWorker' in navigator) {
// より限定的なスコープを使用して、
// サイトのルートでホストされるサービスワーカーを登録します。
navigator.serviceWorker.register('/sw.js', {scope: './'}).then(function(registration) {
console.log('サービスワーカー登録成功:', registration);
}, /*catch*/ function(error) {
console.log('サービスワーカー登録失敗:', error);
});
} else {
console.log('サービスワーカーをサポートしていません。');
}
| 仕様 | 状態 | コメント |
|---|---|---|
| {{SpecName('Service Workers', '#dom-serviceworkercontainer-register', 'ServiceWorkerContainer: register')}} | {{Spec2('Service Workers')}} | 初期定義 |
{{Compat("api.ServiceWorkerContainer.register")}}