• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 管理页面跳转及浏览记录导航
2
3
4## 历史记录导航
5
6使用者在前端页面点击网页中的链接时,Web组件默认会自动打开并加载目标网址。当前端页面替换为新的加载链接时,会自动记录已经访问的网页地址。可以通过[forward()](../reference/apis/js-apis-webview.md#forward)和[backward()](../reference/apis/js-apis-webview.md#backward)接口向前/向后浏览上一个/下一个历史记录。
7
8  在下面的示例中,点击应用的按钮来触发前端页面的后退操作。
9
10```ts
11// xxx.ets
12import web_webview from '@ohos.web.webview';
13
14@Entry
15@Component
16struct WebComponent {
17  webviewController: web_webview.WebviewController = new web_webview.WebviewController();
18  build() {
19    Column() {
20      Button('loadData')
21        .onClick(() => {
22          if (this.webviewController.accessBackward()) {
23            this.webviewController.backward();
24            return true;
25          }
26        })
27      Web({ src: 'https://www.example.com/cn/', controller: this.webviewController})
28    }
29  }
30}
31```
32
33
34如果存在历史记录,[accessBackward()](../reference/apis/js-apis-webview.md#accessbackward)接口会返回true。同样,您可以使用[accessForward()](../reference/apis/js-apis-webview.md#accessforward)接口检查是否存在前进的历史记录。如果您不执行检查,那么当用户浏览到历史记录的末尾时,调用[forward()](../reference/apis/js-apis-webview.md#forward)和[backward()](../reference/apis/js-apis-webview.md#backward)接口时将不执行任何操作。
35
36
37## 页面跳转
38
39当点击网页中的链接需要跳转到应用内其他页面时,可以通过使用Web组件的[onUrlLoadIntercept()](../reference/arkui-ts/ts-basic-components-web.md#onurlloadintercept)接口来实现。
40
41在下面的示例中,应用首页Index.ets加载前端页面route.html,在前端route.html页面点击超链接,可跳转到应用的ProfilePage.ets页面。
42
43- 应用首页index.ets页面代码。
44
45  ```ts
46  // index.ets
47  import web_webview from '@ohos.web.webview';
48  import router from '@ohos.router';
49  @Entry
50  @Component
51  struct WebComponent {
52    webviewController: web_webview.WebviewController = new web_webview.WebviewController();
53
54    build() {
55      Column() {
56        Web({ src: $rawfile('route.html'), controller: this.webviewController })
57          .onUrlLoadIntercept((event) => {
58            let url: string = event.data as string;
59            if (url.indexOf('native://') === 0) {
60              // 跳转其他界面
61              router.pushUrl({ url:url.substring(9) })
62              return true;
63            }
64            return false;
65          })
66      }
67    }
68  }
69  ```
70
71- route.html前端页面代码。
72
73  ```html
74  <!-- route.html -->
75  <!DOCTYPE html>
76  <html>
77  <body>
78    <div>
79        <a href="native://pages/ProfilePage">个人中心</a>
80     </div>
81  </body>
82  </html>
83  ```
84
85- 跳转页面ProfilePage.ets代码。
86
87  ```ts
88  @Entry
89  @Component
90  struct ProfilePage {
91    @State message: string = 'Hello World';
92
93    build() {
94      Column() {
95        Text(this.message)
96          .fontSize(20)
97      }
98    }
99  }
100  ```
101
102
103## 跨应用跳转
104
105Web组件可以实现点击前端页面超链接跳转到其他应用。
106
107在下面的示例中,点击call.html前端页面中的超连接,跳转到电话应用的拨号界面。
108
109- 应用侧代码。
110
111  ```ts
112  // xxx.ets
113  import web_webview from '@ohos.web.webview';
114  import call from '@ohos.telephony.call';
115
116  @Entry
117  @Component
118  struct WebComponent {
119    webviewController: web_webview.WebviewController = new web_webview.WebviewController();
120
121    build() {
122      Column() {
123        Web({ src: $rawfile('xxx.html'), controller: this.webviewController})
124          .onUrlLoadIntercept((event) => {
125            let url: string = event.data as string;
126            // 判断链接是否为拨号链接
127            if (url.indexOf('tel://') === 0) {
128              // 跳转拨号界面
129              call.makeCall(url.substring(6), (err) => {
130                if (!err) {
131                  console.info('make call succeeded.');
132                } else {
133                  console.info('make call fail, err is:' + JSON.stringify(err));
134                }
135              });
136              return true;
137            }
138            return false;
139          })
140      }
141    }
142  }
143  ```
144
145- 前端页面call.html代码。
146
147  ```html
148  <!-- call.html -->
149  <!DOCTYPE html>
150  <html>
151  <body>
152    <div>
153      <a href="tel://xxx xxxx xxx">拨打电话</a>
154    </div>
155  </body>
156  </html>
157  ```
158