codecamp

管理页面跳转及浏览记录导航

历史记录导航

使用者在前端页面点击网页中的链接时,Web组件默认会自动打开并加载目标网址。当前端页面替换为新的加载链接时,会自动记录已经访问的网页地址。可以通过forward()backward()接口向前/向后浏览上一个/下一个历史记录。

在下面的示例中,点击应用的按钮来触发前端页面的后退操作。
  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()接口会返回true。同样,您可以使用accessForward()接口检查是否存在前进的历史记录。如果您不执行检查,那么当用户浏览到历史记录的末尾时,调用forward()backward()接口时将不执行任何操作。

页面跳转

当点击网页中的链接需要跳转到应用内其他页面时,可以通过使用Web组件的onUrlLoadIntercept()接口来实现。

在下面的示例中,应用首页Index.ets加载前端页面route.html,在前端route.html页面点击超链接,可跳转到应用的ProfilePage.ets页面。

  • 应用首页index.ets页面代码。
    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. // 跳转其他界面
    15. router.pushUrl({ url:url.substring(9) })
    16. return true;
    17. }
    18. return false;
    19. })
    20. }
    21. }
    22. }
  • route.html前端页面代码。
    1. <!-- route.html -->
    2. <!DOCTYPE html>
    3. <html>
    4. <body>
    5. <div>
    6. <a href="native://pages/ProfilePage">个人中心</a>
    7. </div>
    8. </body>
    9. </html>
  • 跳转页面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. }

跨应用跳转

Web组件可以实现点击前端页面超链接跳转到其他应用。

在下面的示例中,点击call.html前端页面中的超连接,跳转到电话应用的拨号界面。

  • 应用侧代码。
    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. // 判断链接是否为拨号链接
    14. if (url.indexOf('tel://') === 0) {
    15. // 跳转拨号界面
    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. }
  • 前端页面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>
建立应用侧与前端页面数据通道
管理Cookie及数据存储
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录
HAR

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }