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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
|
---
title: ממשק שירותי מיקום
slug: Web/API/Geolocation/ממשק_שירותי_מיקום
translation_of: Web/API/Geolocation_API
---
<p style="direction: rtl;">ממשק שירותי המיקום, geolocation API, מאפשר למשתמש לשתף את המיקום שלו עם אפליקציות ברשת. כדי להגן על הפרטיות, המשתמש נדרש להסכים לשתף את שירותי המיקום שלו.</p>
<p style="direction: rtl;"><span style="font-size: 2.142857142857143rem; font-weight: 700; letter-spacing: -1px; line-height: 30px;">אובייקט ה- geolocation </span></p>
<p style="direction: rtl;">ממשק שירותי המיקום נגיש באמצעות אובייקט:<span style="line-height: 1.5;">{{domxref("window.navigator.geolocation","navigator.geolocation")}} .</span></p>
<p style="direction: rtl;">אם האובייקט קיים, ממשק שירותי המיקום נתמך: ניתן לבדוק אם ממשק שירותי המיקום נתמך באמצעות: </p>
<pre class="brush: js">if ("geolocation" in navigator) {
/* הממשק נתמך*/
} else {
/* הממשק אינו נתמך */
}הערה
</pre>
<div class="note">
<p style="direction: rtl;"><strong>הערה:</strong> מגרסה מס' 24 של FireFox ומטה, הפקודה geolocation" in navigator" מחזירה true אפילו אם הממשק אינו נתמך. באג זה תוקן ב<a href="/en-US/docs/Mozilla/Firefox/Releases/25/Site_Compatibility">גרסה 25 של FireFox</a> על מנת לעמוד בתקן. ({{bug(884921)}}).</p>
</div>
<h3 id="קבלת_המיקום_הנוכחי" style="direction: rtl;">קבלת המיקום הנוכחי</h3>
<p dir="rtl">כדי לקבל את נתוני המיקום הנוכחי של המשתמש, ניתן לקרוא לפונקציה: <span style="line-height: 1.5;"> {{domxref("window.navigator.geolocation.getCurrentPosition()","getCurrentPosition()")}}. הפונקציה יוצרת קריאה אסינכרונית על מנת לאחזר את המיקום של המשתמש ובודקת את החומרה על מנת לקבל את המיקום העדכני ביותר. כאשר נתוני המיקום חוזרים כתוצאה מהקריאה, פונקציית המטרה (באנגלית: callback) נקראת. אפשר להעביר לקריאה פרמטר נוסף, פרמטר שני: פונקציית מטרה לטיפול במיקרה של שגיאה. אפשר להעביר פרמטר שלישי לקריאה: אובייקט options שבו אפשר להגדיר מהו הוותק המכסימלי לערכי המיקום המוחזרים, משך הזמן המכסימלי להמתנה עד שנתוני המיקום יתקבלו ורמת הדיוק של נתוני המיקום. </span></p>
<div class="note">
<p style="direction: rtl;"><strong>הערה</strong>: כברירת מחדל, הפונקציה<span style="line-height: 1.5;">, {{domxref("window.navigator.geolocation.getCurrentPosition()","getCurrentPosition()")}} מנסה להחזיר את נתוני המיקום במהירות האפשרית, אך ברמת דיוק מינימלית. צורה זו שימושית אם רוצים לקבל את הנתונים במהירות הגבוהה האפשרית תוך התפשרות על רמת הדיוק. במכשירים עם מנגנון GPS משך הזמן לקבלת נתונים יכול לקחת דקה ויותר, לכן הפונקציה </span><span style="line-height: 1.5;"> {{domxref("window.navigator.geolocation.getCurrentPosition()","getCurrentPosition()")}} יכולה לקבל בחזרה נתונים שיש בהם מידה מסוימת של שגיאה (אם המיקום חושב על בסיס כתובת IP על בסיס מיקום נקודת wifi).</span></p>
</div>
<pre class="brush: js">navigator.geolocation.getCurrentPosition(function(position) {
do_something(position.coords.latitude, position.coords.longitude);
});</pre>
<p style="direction: rtl;">הקוד בדוגמא שלעיל יגרום לפונקצייה, ()do_something, להתבצע כאשר נתוני המיקום חזרו.</p>
<p> </p>
<p style="direction: rtl;"><span style="font-size: 1.714285714285714rem; letter-spacing: -0.5px; line-height: 24px;">מעקב אחר המיקום הנוכחי</span></p>
<p style="direction: rtl;"><span style="line-height: 1.5;">אם נתוני המיקום משתנים (בגלל שהדפדפן נמצא בתנועה, או אם הגיעו נתוני מיקום מדוייקים יותר), אפשר להגדיר פונקציית מטרה (באנגלית: callback), המקבלת נתוני מיקום מעודכנים יותר. עושים זאת באמצעות הפונקציה: </span><span style="line-height: 1.5;">{{domxref("window.navigator.geolocation.watchPosition()","watchPosition()")}} שיש לה את אותם פרמטרים כמו הפונקציה: </span><span style="line-height: 1.5;"> {{domxref("window.navigator.geolocation.getCurrentPosition()","getCurrentPosition()")}}. פונקציית המטרה מתבצעת מס' כלשהו של פעמים ומאפשרת לדפדפן לעדכן את המיקום של המשתמש תוך כדי תנועה, או לעדכן את מיקומו בנתונים מעודכנים יותר שהגיעו על ידי טכניקות זיהוי מיקום מדוייקות יותר. ניתן להגדיר פונקציית מטרה נוספת למקרה של שגיאה שתיקרא בכל פעם שתתרחש שגיאה כפי שקורה במיקרה של: </span><span style="line-height: 1.5;"> {{domxref("window.navigator.geolocation.getCurrentPosition()","getCurrentPosition()")}}.</span></p>
<div class="note">
<p style="direction: rtl;"><strong>הערה</strong>: ניתן להשתמש בפונקציה: <span style="line-height: 1.5;">{{domxref("window.navigator.geolocation.watchPosition()","watchPosition()")}} מבלי צורך לקרוא לפני כן לפונקציה: {{domxref("window.navigator.geolocation.getCurrentPosition()","getCurrentPosition()")}} .</span></p>
</div>
<pre class="brush: js">var watchID = navigator.geolocation.watchPosition(function(position) {
do_something(position.coords.latitude, position.coords.longitude);
});</pre>
<p style="direction: rtl;">הפונקציה <span style="line-height: 1.5;">{{domxref("window.navigator.geolocation.watchPosition()","watchPosition()")}} מחזירה id שמזהה את הפונקציה שעוקבת אחר המיקום. ניתן לאחר מכן להשתמש בו כדי לקרוא לפונקציה </span><span style="line-height: 1.5;"> {{domxref("window.navigator.geolocation.clearWatch()","clearWatch()")}} על מנת להפסיק את פעולת המעקב אחרי תנועת המשתמש.</span></p>
<pre class="brush: js">navigator.geolocation.clearWatch(watchID);
</pre>
<h3 id="כיול_התוצאות" style="direction: rtl;">כיול התוצאות</h3>
<p style="direction: rtl;">הן הפונקציה {{domxref("window.navigator.geolocation.getCurrentPosition()","getCurrentPosition()")}} והן הפונקציה {{domxref("window.navigator.geolocation.watchPosition()","watchPosition()")}} מקבלות פרמטר פונקציית מטרה למקרה הצלחה בקבלת נתונים, מקבלות פרמטר אופציונאלי למקרה של שגיאה בקבלת נתוני מיקום ופרמטר אופציונאלי שלישי: אובייקט <span style="line-height: 1.5;"> </span><code style="font-style: normal; line-height: 1.5;">PositionOptions</code><span style="line-height: 1.5;">.</span></p>
<p>{{page("/en-US/docs/DOM/window.navigator.geolocation.getCurrentPosition","PositionOptions")}}</p>
<p style="direction: rtl;">קריאה ל: {{domxref("window.navigator.geolocation.watchPosition()","watchPosition")}} יכולה להיראות כך:</p>
<pre class="brush: js">function geo_success(position) {
do_something(position.coords.latitude, position.coords.longitude);
}
function geo_error() {
alert("Sorry, no position available.");
}
var geo_options = {
enableHighAccuracy: true,
maximumAge : 30000,
timeout : 27000
};
var wpid = navigator.geolocation.watchPosition(geo_success, geo_error, geo_options);</pre>
<p><a id="fck_paste_padding">A demo of watchPosition in use: </a><a class="external" href="http://www.thedotproduct.org/experiments/geo/">http://www.thedotproduct.org/experiments/geo/</a><br>
<a id="fck_paste_padding"></a></p>
<h2 id="נתוני_המיקום" style="direction: rtl;">נתוני המיקום</h2>
<p style="direction: rtl;">המיקום של המשתמש הוא אובייקט <code>Position</code> שמכיל בתוכו אובייקט <code>Coordinates</code>.</p>
<p><span style="line-height: 1.5;">{{page("/en-US/docs/DOM/window.navigator.geolocation.getCurrentPosition","Position")}}</span></p>
<p>{{page("/en-US/docs/DOM/window.navigator.geolocation.getCurrentPosition","Coordinates")}}</p>
<h2 id="טיפול_בשגיאות" style="direction: rtl;">טיפול בשגיאות</h2>
<p style="direction: rtl;"><span style="font-size: 14px; font-weight: normal; line-height: 1.5;">פונקציית המטרה לטיפול בשגיאות נגישה גם בקריאה לפונקציה ()</span><code><span style="font-size: 14px; line-height: 1.5;"><font face="Courier New, Andale Mono, monospace">getCurrentPosition</font></span></code><span style="line-height: 1.5;"><code> </code>וגם בקריאה ל ()<code>watchPosition</code><strong><code>, </code></strong></span>ומקבלת כפרמטר ראשון אובייקט <code>PositionError</code>. </p>
<pre class="brush: js">function errorCallback(error) {
alert('ERROR(' + error.code + '): ' + error.message);
};
</pre>
<p>{{page("/en-US/docs/DOM/window.navigator.geolocation.getCurrentPosition","PositionError")}}</p>
<h2 id="דוגמא_שלמה_לממשק_שירותי_מיקום" style="direction: rtl;">דוגמא שלמה לממשק שירותי מיקום</h2>
<div class="hidden">
<pre class="brush: css">body {
padding: 20px;
background-color:#ffffc9
}
p { margin : 0; }
</pre>
</div>
<h3 id="HTML" style="direction: rtl;">HTML: </h3>
<pre class="brush: html;"><p><button onclick="geoFindMe()">Show my location</button></p>
<div id="out"></div>
</pre>
<h3 id="JavaScript" style="direction: rtl;">JavaScript:</h3>
<pre class="brush: js;">function geoFindMe() {
var output = document.getElementById("out");
if (!navigator.geolocation){
output.innerHTML = "<p>Geolocation is not supported by your browser</p>";
return;
}
function success(position) {
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
output.innerHTML = '<p>Latitude is ' + latitude + '° <br>Longitude is ' + longitude + '°</p>';
var img = new Image();
img.src = "http://maps.googleapis.com/maps/api/staticmap?center=" + latitude + "," + longitude + "&zoom=13&size=300x300&sensor=false";
output.appendChild(img);
};
function error() {
output.innerHTML = "Unable to retrieve your location";
};
output.innerHTML = "<p>Locating…</p>";
navigator.geolocation.getCurrentPosition(success, error);
}
</pre>
<h3 id="תוצאות_של_הדוגמא_לעיל" style="direction: rtl;">תוצאות של הדוגמא לעיל:</h3>
<p>{{ EmbedLiveSample('Geolocation_Live_Example',350,410) }}</p>
<h2 id="הצגת_הודעה_לבקשת_רשות" style="direction: rtl;">הצגת הודעה לבקשת רשות</h2>
<p style="direction: rtl;">כל תוסף המשתייך ל addons.mozilla.org המשתמש בממשק שירותי המיקום חייב לקבל אישור מהמשתמש לגשת לממשק על ידי בקשת רשות מפורשת. הפונקציה הבאה תבקש אישור באופן שזהה לבקשת האישור המוצגת לדפים ברשת. הבחירה של המשתמש תישמר בהעדפות באמצעות פרמטר <code>pref </code>או הוא מאופשר. הפונקציה המוצבעת על ידי פרמטר <code>callback </code>תיקרא עם פרמטר בוליאני המציין את בחירת המשתמש. אם הערך <code>true </code>יש לתוסף הרשאה לגשת לנתוני המיקום. </p>
<pre class="brush: js">function prompt(window, pref, message, callback) {
let branch = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch);
if (branch.getPrefType(pref) === branch.PREF_STRING) {
switch (branch.getCharPref(pref)) {
case "always":
return callback(true);
case "never":
return callback(false);
}
}
let done = false;
function remember(value, result) {
return function() {
done = true;
branch.setCharPref(pref, value);
callback(result);
}
}
let self = window.PopupNotifications.show(
window.gBrowser.selectedBrowser,
"geolocation",
message,
"geo-notification-icon",
{
label: "Share Location",
accessKey: "S",
callback: function(notification) {
done = true;
callback(true);
}
}, [
{
label: "Always Share",
accessKey: "A",
callback: remember("always", true)
},
{
label: "Never Share",
accessKey: "N",
callback: remember("never", false)
}
], {
eventCallback: function(event) {
if (event === "dismissed") {
if (!done) callback(false);
done = true;
window.PopupNotifications.remove(self);
}
},
persistWhileVisible: true
});
}
prompt(window,
"extensions.foo-addon.allowGeolocation",
"Foo Add-on wants to know your location.",
function callback(allowed) { alert(allowed); });
</pre>
<h2 id="תאימות_דפדפנים">תאימות דפדפנים</h2>
<div>
{{ CompatibilityTable() }}</div>
<div>
</div>
<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>Firefox OS</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>1.0.1</td>
<td>{{CompatUnknown()}}</td>
<td>10.60<br>
Removed in 15.0<br>
Reintroduced in 16.0</td>
<td>{{CompatUnknown()}}</td>
</tr>
</tbody>
</table>
</div>
<h3 id="הערות_לגבי_Gecko" style="direction: rtl;">הערות לגבי Gecko</h3>
<p style="direction: rtl;">דפדפן FireFox תומך בקבלת נתוני המיקום בהתבסס על מידע WiFi באמצעות שירותי המיקום של גוגל. בטרנזאקציה שבין FireFox ל Google, המידע שמועבר כולל מידע על נקודת הגישה ל WiFi, כולל access token (שדומה לcookie בעלת תוקף למשך שבועיים) וכולל את כתובת ה IP של המשתמש. למידע נוסף יש התעדכן ב<a href="http://www.mozilla.com/en-US/legal/privacy/">תנאי הפרטיות</a> של Mozilla וב<a href="http://www.google.com/privacy-lsf.html">תנאי הפרטיות</a> של גוגל המפרטים באיזה אופן נתונים אלה ניתנים לשימוש. </p>
<p style="direction: rtl;">FireFox גרסת 3.6 (Gecko 1.9.2) הוסיף תמיכה לשימוש בשירות GPSD (GPS daemon) בשביל שירותי מיקום עבור Linux. </p>
<p style="direction: rtl;"><span style="font-size: 2.142857142857143rem; font-weight: 700; letter-spacing: -1px; line-height: 30px;">לעיון נוסף</span></p>
<ul>
<li>{{domxref("window.navigator.geolocation","navigator.geolocation")}}</li>
<li><a href="/en-US/Apps/Build/gather_and_modify_data/Plotting_yourself_on_the_map">צייר את עצמך על המפה</a></li>
<li><a href="http://www.w3.org/TR/geolocation-API/">ממשק שירותי המיקום ב:w3.org</a></li>
<li><a href="/en-US/demos/tag/tech:geolocation">דוגמאות לשימוש במשק נתוני המיקום</a></li>
<li><a href="https://hacks.mozilla.org/2013/10/who-moved-my-geolocation/">Who moved my geolocation?</a> (Hacks blog)</li>
</ul>
|