管理頁(yè)面跳轉(zhuǎn)及瀏覽記錄導(dǎo)航

2024-02-16 13:40 更新

歷史記錄導(dǎo)航

使用者在前端頁(yè)面點(diǎn)擊網(wǎng)頁(yè)中的鏈接時(shí),Web組件默認(rèn)會(huì)自動(dòng)打開(kāi)并加載目標(biāo)網(wǎng)址。當(dāng)前端頁(yè)面替換為新的加載鏈接時(shí),會(huì)自動(dòng)記錄已經(jīng)訪問(wèn)的網(wǎng)頁(yè)地址??梢酝ㄟ^(guò)forward()backward()接口向前/向后瀏覽上一個(gè)/下一個(gè)歷史記錄。

在下面的示例中,點(diǎn)擊應(yīng)用的按鈕來(lái)觸發(fā)前端頁(yè)面的后退操作。
  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. webviewController: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('loadData')
  10. .onClick(() => {
  11. if (this.webviewController.accessBackward()) {
  12. this.webviewController.backward();
  13. return true;
  14. }
  15. })
  16. Web({ src: 'https://www.example.com/cn/', controller: this.webviewController})
  17. }
  18. }
  19. }

如果存在歷史記錄,accessBackward()接口會(huì)返回true。同樣,您可以使用accessForward()接口檢查是否存在前進(jìn)的歷史記錄。如果您不執(zhí)行檢查,那么當(dāng)用戶瀏覽到歷史記錄的末尾時(shí),調(diào)用forward()backward()接口時(shí)將不執(zhí)行任何操作。

頁(yè)面跳轉(zhuǎn)

當(dāng)點(diǎn)擊網(wǎng)頁(yè)中的鏈接需要跳轉(zhuǎn)到應(yīng)用內(nèi)其他頁(yè)面時(shí),可以通過(guò)使用Web組件的onUrlLoadIntercept()接口來(lái)實(shí)現(xiàn)。

在下面的示例中,應(yīng)用首頁(yè)Index.ets加載前端頁(yè)面route.html,在前端route.html頁(yè)面點(diǎn)擊超鏈接,可跳轉(zhuǎn)到應(yīng)用的ProfilePage.ets頁(yè)面。

  • 應(yīng)用首頁(yè)index.ets頁(yè)面代碼。
    1. // index.ets
    2. import web_webview from '@ohos.web.webview';
    3. import router from '@ohos.router';
    4. @Entry
    5. @Component
    6. struct WebComponent {
    7. webviewController: web_webview.WebviewController = new web_webview.WebviewController();
    8. build() {
    9. Column() {
    10. Web({ src: $rawfile('route.html'), controller: this.webviewController })
    11. .onUrlLoadIntercept((event) => {
    12. let url: string = event.data as string;
    13. if (url.indexOf('native://') === 0) {
    14. // 跳轉(zhuǎn)其他界面
    15. router.pushUrl({ url:url.substring(9) })
    16. return true;
    17. }
    18. return false;
    19. })
    20. }
    21. }
    22. }
  • route.html前端頁(yè)面代碼。
    1. <!-- route.html -->
    2. <!DOCTYPE html>
    3. <html>
    4. <body>
    5. <div>
    6. <a href="native://pages/ProfilePage">個(gè)人中心</a>
    7. </div>
    8. </body>
    9. </html>
  • 跳轉(zhuǎn)頁(yè)面ProfilePage.ets代碼。
    1. @Entry
    2. @Component
    3. struct ProfilePage {
    4. @State message: string = 'Hello World';
    5. build() {
    6. Column() {
    7. Text(this.message)
    8. .fontSize(20)
    9. }
    10. }
    11. }

跨應(yīng)用跳轉(zhuǎn)

Web組件可以實(shí)現(xiàn)點(diǎn)擊前端頁(yè)面超鏈接跳轉(zhuǎn)到其他應(yīng)用。

在下面的示例中,點(diǎn)擊call.html前端頁(yè)面中的超連接,跳轉(zhuǎn)到電話應(yīng)用的撥號(hào)界面。

  • 應(yīng)用側(cè)代碼。
    1. // xxx.ets
    2. import web_webview from '@ohos.web.webview';
    3. import call from '@ohos.telephony.call';
    4. @Entry
    5. @Component
    6. struct WebComponent {
    7. webviewController: web_webview.WebviewController = new web_webview.WebviewController();
    8. build() {
    9. Column() {
    10. Web({ src: $rawfile('xxx.html'), controller: this.webviewController})
    11. .onUrlLoadIntercept((event) => {
    12. let url: string = event.data as string;
    13. // 判斷鏈接是否為撥號(hào)鏈接
    14. if (url.indexOf('tel://') === 0) {
    15. // 跳轉(zhuǎn)撥號(hào)界面
    16. call.makeCall(url.substring(6), (err) => {
    17. if (!err) {
    18. console.info('make call succeeded.');
    19. } else {
    20. console.info('make call fail, err is:' + JSON.stringify(err));
    21. }
    22. });
    23. return true;
    24. }
    25. return false;
    26. })
    27. }
    28. }
    29. }
  • 前端頁(yè)面call.html代碼。
    1. <!-- call.html -->
    2. <!DOCTYPE html>
    3. <html>
    4. <body>
    5. <div>
    6. <a href="tel://xxx xxxx xxx">撥打電話</a>
    7. </div>
    8. </body>
    9. </html>
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)