• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 管理位置权限
2
3
4Web组件提供位置权限管理能力。开发者可以通过[onGeolocationShow()](../reference/arkui-ts/ts-basic-components-web.md#ongeolocationshow)接口对某个网站进行位置权限管理。Web组件根据接口响应结果,决定是否赋予前端页面权限。获取设备位置,需要开发者配置[ohos.permission.LOCATION](../security/accesstoken-guidelines.md)权限。
5
6
7在下面的示例中,用户点击前端页面"获取位置"按钮,Web组件通过弹窗的形式通知应用侧位置权限请求消息。
8
9
10- 前端页面代码。
11
12  ```html
13  <!DOCTYPE html>
14  <html>
15  <body>
16  <p id="locationInfo">位置信息</p>
17  <button onclick="getLocation()">获取位置</button>
18  <script>
19  var locationInfo=document.getElementById("locationInfo");
20  function getLocation(){
21    if (navigator.geolocation) {
22      <!-- 前端页面访问设备地理位置 -->
23      navigator.geolocation.getCurrentPosition(showPosition);
24    }
25  }
26  function showPosition(position){
27    locationInfo.innerHTML="Latitude: " + position.coords.latitude + "<br />Longitude: " + position.coords.longitude;
28  }
29  </script>
30  </body>
31  </html>
32  ```
33
34
35- 应用代码。
36
37  ```ts
38  // xxx.ets
39  import web_webview from '@ohos.web.webview';
40
41  @Entry
42  @Component
43  struct WebComponent {
44    controller: web_webview.WebviewController = new web_webview.WebviewController();
45    build() {
46      Column() {
47        Web({ src:$rawfile('getLocation.html'), controller:this.controller })
48          .geolocationAccess(true)
49          .onGeolocationShow((event) => {  // 地理位置权限申请通知
50            AlertDialog.show({
51              title: '位置权限请求',
52              message: '是否允许获取位置信息',
53              primaryButton: {
54                value: 'cancel',
55                action: () => {
56                  event.geolocation.invoke(event.origin, false, false);   // 不允许此站点地理位置权限请求
57                }
58              },
59              secondaryButton: {
60                value: 'ok',
61                action: () => {
62                  event.geolocation.invoke(event.origin, true, false);    // 允许此站点地理位置权限请求
63                }
64              },
65              cancel: () => {
66                event.geolocation.invoke(event.origin, false, false);   // 不允许此站点地理位置权限请求
67              }
68            })
69          })
70      }
71    }
72  }
73  ```
74