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