# 管ç†é¡µé¢è·³è½¬åŠæµè§ˆè®°å½•å¯¼èˆª ## 历å²è®°å½•å¯¼èˆª 在å‰ç«¯é¡µé¢ç‚¹å‡»ç½‘页ä¸çš„链接时,Webç»„ä»¶é»˜è®¤ä¼šè‡ªåŠ¨æ‰“å¼€å¹¶åŠ è½½ç›®æ ‡ç½‘å€ã€‚当å‰ç«¯é¡µé¢æ›¿æ¢ä¸ºæ–°çš„åŠ è½½é“¾æŽ¥æ—¶ï¼Œä¼šè‡ªåŠ¨è®°å½•å·²ç»è®¿é—®çš„网页地å€ã€‚å¯ä»¥é€šè¿‡[forward()](../reference/apis-arkweb/js-apis-webview.md#forward)å’Œ[backward()](../reference/apis-arkweb/js-apis-webview.md#backward)接å£å‘å‰/å‘åŽæµè§ˆä¸Šä¸€ä¸ª/下一个历å²è®°å½•ã€‚ 页é¢åŠ 载过程ä¸ï¼Œè‹¥æ¶‰åŠç½‘络资æºèŽ·å–,需è¦åœ¨module.json5ä¸é…置网络访问æƒé™ï¼Œæ·»åŠ 方法请å‚考[在é…置文件ä¸å£°æ˜Žæƒé™](../security/AccessToken/declare-permissions.md)。 ``` "requestPermissions":[ { "name" : "ohos.permission.INTERNET" } ] ``` 在下é¢çš„示例ä¸ï¼Œç‚¹å‡»åº”用的按钮æ¥è§¦å‘å‰ç«¯é¡µé¢çš„åŽé€€æ“作。 ```ts // xxx.ets import { webview } from '@kit.ArkWeb'; @Entry @Component struct WebComponent { webviewController: webview.WebviewController = new webview.WebviewController(); build() { Column() { Button('loadData') .onClick(() => { if (this.webviewController.accessBackward()) { this.webviewController.backward(); } }) Web({ src: 'https://www.example.com/cn/', controller: this.webviewController }) } } } ``` 如果å˜åœ¨åŽ†å²è®°å½•ï¼Œ[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)接å£æ—¶å°†ä¸æ‰§è¡Œä»»ä½•æ“作。 ## 页é¢è·³è½¬ 当点击网页ä¸çš„链接需è¦è·³è½¬åˆ°åº”用内其他页é¢æ—¶ï¼Œå¯ä»¥é€šè¿‡ä½¿ç”¨Web组件的[onLoadIntercept()](../reference/apis-arkweb/ts-basic-components-web.md#onloadintercept10)接å£æ¥å®žçŽ°ã€‚ 在下é¢çš„示例ä¸ï¼Œåº”用首页Index.etsåŠ è½½å‰ç«¯é¡µé¢route.html,在å‰ç«¯route.html页é¢ç‚¹å‡»è¶…链接,å¯è·³è½¬åˆ°åº”用的ProfilePage.ets页é¢ã€‚ - 应用首页Index.ets页é¢ä»£ç 。 ```ts // index.ets import { webview } from '@kit.ArkWeb'; import { router } from '@kit.ArkUI'; @Entry @Component struct WebComponent { webviewController: webview.WebviewController = new webview.WebviewController(); build() { Column() { // 资æºæ–‡ä»¶route.htmlå˜æ”¾è·¯å¾„src/main/resources/rawfile Web({ src: $rawfile('route.html'), controller: this.webviewController }) .onLoadIntercept((event) => { if (event) { let url: string = event.data.getRequestUrl(); if (url.indexOf('native://') === 0) { // è·³è½¬å…¶ä»–ç•Œé¢ router.pushUrl({ url: url.substring(9) }); return true; } } return false; }) } } } ``` - route.htmlå‰ç«¯é¡µé¢ä»£ç 。 ```html <!-- route.html --> <!DOCTYPE html> <html> <body> <div> <a href="native://pages/ProfilePage">个人ä¸å¿ƒ</a> </div> </body> </html> ``` - 跳转页é¢ProfilePage.ets代ç 。 ```ts @Entry @Component struct ProfilePage { @State message: string = 'Hello World'; build() { Column() { Text(this.message) .fontSize(20) } } } ``` ## 跨应用跳转 Web组件å¯ä»¥å®žçŽ°ç‚¹å‡»å‰ç«¯é¡µé¢è¶…链接跳转到其他应用。 在下é¢çš„示例ä¸ï¼Œç‚¹å‡»call.htmlå‰ç«¯é¡µé¢ä¸çš„超链接,跳转到电è¯åº”用的拨å·ç•Œé¢ã€‚ - 应用侧代ç 。 ```ts // xxx.ets import { webview } from '@kit.ArkWeb'; import { call } from '@kit.TelephonyKit'; @Entry @Component struct WebComponent { webviewController: webview.WebviewController = new webview.WebviewController(); build() { Column() { Web({ src: $rawfile('call.html'), controller: this.webviewController }) .onLoadIntercept((event) => { if (event) { let url: string = event.data.getRequestUrl(); // 判æ–链接是å¦ä¸ºæ‹¨å·é“¾æŽ¥ if (url.indexOf('tel://') === 0) { // 跳转拨å·ç•Œé¢ call.makeCall(url.substring(6), (err) => { if (!err) { console.info('make call succeeded.'); } else { console.info('make call fail, err is:' + JSON.stringify(err)); } }); return true; } } return false; }) } } } ``` - å‰ç«¯é¡µé¢call.html代ç 。 ```html <!-- call.html --> <!DOCTYPE html> <html> <body> <div> <a href="tel://xxx xxxx xxx">拨打电è¯</a> </div> </body> </html> ```