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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
---
title: Geolocation.watchPosition()
slug: Web/API/Geolocation/watchPosition
translation_of: Web/API/Geolocation/watchPosition
---
<p>{{ APIref("Geolocation API") }}</p>
<p><strong><code>Geolocation.watchPosition()</code></strong> 用于注册监听器,在设备的地理位置发生改变的时候自动被调用。也可以选择特定的错误处理函数。</p>
<p>该方法会返回一个 ID,如要取消监听可以通过 {{domxref("Geolocation.clearWatch()")}} 传入该 ID 实现取消的目的。</p>
<h2 id="语法">语法</h2>
<pre class="syntaxbox"><em>id</em> = navigator.geolocation.watchPosition(<em>success[</em>, <em>error[</em>, <em>options]]</em>)</pre>
<h3 id="参数">参数</h3>
<dl>
<dt><em>success</em></dt>
<dd>成功时候的回调函数, 同时传入一个 {{domxref("Position")}} 对象当作参数。</dd>
<dt><em>error</em> {{optional_inline}}</dt>
<dd>失败时候的回调函数,可选, 会传入一个 {{domxref("PositionError")}} 对象当作参数。</dd>
<dt><em>options</em> {{optional_inline}}</dt>
<dd>一个可选的 {{domxref("PositionOptions")}} 对象。</dd>
</dl>
<h2 id="示例">示例</h2>
<pre class="brush: js">var id, target, options;
function success(pos) {
var crd = pos.coords;
if (target.latitude === crd.latitude && target.longitude === crd.longitude) {
console.log('Congratulations, you reached the target');
navigator.geolocation.clearWatch(id);
}
}
function error(err) {
console.warn('ERROR(' + err.code + '): ' + err.message);
}
target = {
latitude : 0,
longitude: 0
};
options = {
enableHighAccuracy: false,
timeout: 5000,
maximumAge: 0
};
id = navigator.geolocation.watchPosition(success, error, options);
</pre>
<h2 id="注意">注意</h2>
<p>如果你的应用程序运行在 firefox OS 上,请参考下 <a href="/en-US/docs/Web/API/Geolocation/navigator.requestWakeLock()">geolocation wake lock</a> ,以便在屏幕关闭的时候,程序可以运行在后台以继续监听位置的变化。</p>
<h2 id="规范">规范</h2>
<table class="standard-table">
<thead>
<tr>
<th scope="col">规范</th>
<th scope="col">状态</th>
<th scope="col">说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{SpecName('Geolocation', '#watch-position', 'Geolocation.watchPosition()')}}</td>
<td>{{Spec2('Geolocation')}}</td>
<td>Initial specification.</td>
</tr>
</tbody>
</table>
<h2 id="浏览器兼容性">浏览器兼容性</h2>
<p>{{ CompatibilityTable() }}</p>
<div id="compat-desktop">
<table class="compat-table">
<tbody>
<tr>
<th>Feature</th>
<th>Chrome</th>
<th>Firefox (Gecko)</th>
<th>Internet Explorer</th>
<th>Opera</th>
<th>Safari</th>
</tr>
<tr>
<td>Basic support</td>
<td>5</td>
<td>{{CompatGeckoDesktop("1.9.1")}}</td>
<td>9</td>
<td>10.60<br>
Removed in 15.0<br>
Reintroduced in 16.0</td>
<td>5</td>
</tr>
</tbody>
</table>
</div>
<div id="compat-mobile">
<table class="compat-table">
<tbody>
<tr>
<th>Feature</th>
<th>Android</th>
<th>Chrome for Android</th>
<th>Firefox Mobile (Gecko)</th>
<th>IE Mobile</th>
<th>Opera Mobile</th>
<th>Safari Mobile</th>
</tr>
<tr>
<td>Basic support</td>
<td>{{CompatUnknown()}}</td>
<td>{{CompatUnknown()}}</td>
<td>{{CompatGeckoMobile("4")}}</td>
<td>{{CompatUnknown()}}</td>
<td>10.60</td>
<td>{{CompatUnknown()}}</td>
</tr>
</tbody>
</table>
</div>
<h2 id="sect1"> </h2>
<h2 id="相关链接">相关链接</h2>
<ul>
<li><a href="/en-US/docs/Web/API/Geolocation/navigator.requestWakeLock()">geolocation wake lock</a></li>
<li><a href="/en-US/docs/WebAPI/Using_geolocation" title="/en-US/docs/WebAPI/Using_geolocation">使用地理位置定位</a></li>
<li>该方法属于 {{domxref("Geolocation")}},可以通过 {{domxref("NavigatorGeolocation.geolocation")}} 访问。</li>
<li>取消监听的方法: {{domxref("Geolocation.clearWatch()")}}</li>
<li>另一个类似的方法: {{domxref("Geolocation.getCurrentPosition()")}}</li>
</ul>
|