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 import { router } from '@kit.ArkUI'; 59 60 @Entry 61 @Component 62 struct WebComponent { 63 webviewController: webview.WebviewController = new webview.WebviewController(); 64 65 build() { 66 Column() { 67 // 资源文件route.html存放路径src/main/resources/rawfile 68 Web({ src: $rawfile('route.html'), controller: this.webviewController }) 69 .onLoadIntercept((event) => { 70 if (event) { 71 let url: string = event.data.getRequestUrl(); 72 if (url.indexOf('native://') === 0) { 73 // 跳转其他界面 74 router.pushUrl({ url: url.substring(9) }); 75 return true; 76 } 77 } 78 return false; 79 }) 80 } 81 } 82 } 83 ``` 84 85- route.html前端页面代码。 86 87 ```html 88 <!-- route.html --> 89 <!DOCTYPE html> 90 <html> 91 <body> 92 <div> 93 <a href="native://pages/ProfilePage">个人中心</a> 94 </div> 95 </body> 96 </html> 97 ``` 98 99- 跳转页面ProfilePage.ets代码。 100 101 ```ts 102 @Entry 103 @Component 104 struct ProfilePage { 105 @State message: string = 'Hello World'; 106 107 build() { 108 Column() { 109 Text(this.message) 110 .fontSize(20) 111 } 112 } 113 } 114 ``` 115 116 117## 跨应用跳转 118 119Web组件可以实现点击前端页面超链接跳转到其他应用。 120 121在下面的示例中,点击call.html前端页面中的超链接,跳转到电话应用的拨号界面。 122 123- 应用侧代码。 124 125 ```ts 126 // xxx.ets 127 import { webview } from '@kit.ArkWeb'; 128 import { call } from '@kit.TelephonyKit'; 129 130 @Entry 131 @Component 132 struct WebComponent { 133 webviewController: webview.WebviewController = new webview.WebviewController(); 134 135 build() { 136 Column() { 137 Web({ src: $rawfile('call.html'), controller: this.webviewController }) 138 .onLoadIntercept((event) => { 139 if (event) { 140 let url: string = event.data.getRequestUrl(); 141 // 判断链接是否为拨号链接 142 if (url.indexOf('tel://') === 0) { 143 // 跳转拨号界面 144 call.makeCall(url.substring(6), (err) => { 145 if (!err) { 146 console.info('make call succeeded.'); 147 } else { 148 console.info('make call fail, err is:' + JSON.stringify(err)); 149 } 150 }); 151 return true; 152 } 153 } 154 return false; 155 }) 156 } 157 } 158 } 159 ``` 160 161- 前端页面call.html代码。 162 163 ```html 164 <!-- call.html --> 165 <!DOCTYPE html> 166 <html> 167 <body> 168 <div> 169 <a href="tel://xxx xxxx xxx">拨打电话</a> 170 </div> 171 </body> 172 </html> 173 ``` 174