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