| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <title>Approximate Geolocation</title> | |
| </head> | |
| <body> | |
| <button id="get-location-button">Get Location</button> | |
| <geolocation accuracymode="approximate" id="geolocation-element-approximate"></geolocation> | |
| <geolocation accuracymode="precise" id="geolocation-element-precise"></geolocation> | |
| <script> | |
| let result; | |
| let resolveLocation; | |
| async function getAccuracyModeResult() { | |
| const pos = await result; | |
| if (pos.coords.accuracy >= 2000) { | |
| return "approximate"; | |
| } | |
| return "precise"; | |
| } | |
| // This function needs to be called before the <geolocation> element | |
| // is clicked. | |
| function initResultPromise(resolve) { | |
| result = new Promise((resolve) => { | |
| resolveLocation = resolve; | |
| }); | |
| } | |
| document.getElementById('get-location-button').addEventListener('click', () => { | |
| result = new Promise((resolve, reject) => { | |
| navigator.geolocation.getCurrentPosition(resolve, reject); | |
| }); | |
| }); | |
| ['geolocation-element-approximate', 'geolocation-element-precise'].forEach(id => { | |
| document.getElementById(id).addEventListener('location', (event) => { | |
| resolveLocation(event.target.position); | |
| }); | |
| }); | |
| </script> | |
| </body> | |
| </html> |