-
Notifications
You must be signed in to change notification settings - Fork 8k
/
index.md
79 lines (56 loc) · 3.18 KB
/
index.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
---
title: "XRSystem: isSessionSupported() メソッド"
short-title: isSessionSupported()
slug: Web/API/XRSystem/isSessionSupported
l10n:
sourceCommit: 89c435da452257b944b403cc9e45036fcb22590e
---
{{APIRef("WebXR Device API")}}{{SeeCompatTable}}{{SecureContext_Header}}
{{domxref("XRSystem")}} の **`isSessionSupported()`** メソッドは、指定した WebXR セッションモードがユーザーの WebXR 端末で対応している場合は `true` に解決するプロミスを返します。そうでない場合、プロミスは `false` に解決されます。
利用できる端末がないか、ブラウザーに XR 端末を使用する権限がない場合、プロミスは適切な {{domxref("DOMException")}} で拒否されます。
## 構文
```js-nolint
isSessionSupported(mode)
```
### 引数
- `mode`
- : 文字列 ({{jsxref("String")}}) で、対応を調べる WebXR セッションモードを指定します。調べる可能なモード:
- `immersive-ar` {{Experimental_Inline}}
- `immersive-vr`
- `inline`
### 返値
プロミス ({{jsxref("Promise")}}) で、指定したセッションモードを対応している場合は `true` に解決し、そうでない場合は `false` に解決します。
### 例外
`isSessionSupported()` は実際の例外を発生させるのではなく、{{domxref("DOMException")}} という名前の文字列をハンドラーに渡して、返されたプロミスを拒否します。
- `SecurityError`
- : この機能の使用が `xr-spatial-tracking` [権限ポリシー](/ja/docs/Web/HTTP/Permissions_Policy)によってブロックされています。
## 例
この例では、 `isSessionSupported()` を使用して、 `immersive-vr` セッションに対応しているかどうかを調べることで、端末が VR モードに対応しているかどうかを検出しています。もし対応していれば、 "Enter XR" というボタンを設定し、 `onButtonClicked()` というメソッドを呼び出してボタンを有効にします。
まだセッションが開始されていない場合は、VRセッションをリクエストし、成功した場合は `onSessionStarted()` と呼ばれるメソッドでセッションを設定します。ボタンがクリックされたときにセッションが既に進行中であれば、 `xrSession` オブジェクトの {{domxref("XRSession.end", "end()")}} メソッドを呼び出して WebXR セッションをシャットダウンします。
```js
if (navigator.xr) {
navigator.xr.isSessionSupported("immersive-vr").then((isSupported) => {
if (isSupported) {
userButton.addEventListener("click", onButtonClicked);
userButton.textContent = "Enter XR";
userButton.disabled = false;
}
});
}
function onButtonClicked() {
if (!xrSession) {
navigator.xr.requestSession("immersive-vr").then((session) => {
xrSession = session;
// onSessionStarted() は、簡潔かつ明瞭にするために示しません。
onSessionStarted(xrSession);
});
} else {
// ボタンはトグルボタンです。
xrSession.end();
}
}
```
## 仕様書
{{Specifications}}
## ブラウザーの互換性
{{Compat}}