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