资讯 小学 初中 高中 语言 会计职称 学历提升 法考 计算机考试 医护考试 建工考试 教育百科
栏目分类:
子分类:
返回
空麓网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
空麓网 > 计算机考试 > 软件开发 > 后端开发 > Java

HarmonyOS:WebView中按返回键不能返回到上一界面

Java 更新时间: 发布时间: 计算机考试归档 最新发布

HarmonyOS:WebView中按返回键不能返回到上一界面

场景

  在Ability中,我们点击按钮进入到一个WebView中,在WebView中点击新的链接进入到另一个新的界面,这时按下返回键发现WebView并未返回到上一个浏览的界面,而是直接退出了WebView。

解决

  重写一下Ability的onKeyDown方法,对返回进行监听:

public boolean onKeyDown(int keyCode, KeyEvent keyEvent) {
   Navigator navigator = webView.getNavigator();
   if(keyCode == keyEvent.KEY_BACK && navigator.canGoBack()) {
       navigator.goBack();
       return true;
   }
   return super.onKeyDown(keyCode, keyEvent);
}

  通过getNavigator方法获取Navigator对象,如果用户当前按下了返回键并且WebView设置了能够返回,则调用navigator的goBack()方法进行返回。

布局文件



    
    
    

Ability处理逻辑
package com.example.ncepu.Student.User;

import com.example.ncepu.ResourceTable;
import com.example.ncepu.Student.User.slice.CSDNAbilitySlice;
import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
import ohos.agp.components.webengine.Navigator;
import ohos.agp.components.webengine.ResourceRequest;
import ohos.agp.components.webengine.WebAgent;
import ohos.agp.components.webengine.WebView;
import ohos.multimodalinput.event.KeyEvent;
import ohos.utils.net.Uri;

public class CSDNAbility extends Ability {

    private WebView webView;

    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setMainRoute(CSDNAbilitySlice.class.getName());
        super.setUIContent(ResourceTable.Layout_ability_csdn);
        initViews();
    }

    private void initViews() {
        webView = (WebView) findComponentById(ResourceTable.Id_web_view);
        webView.getWebConfig().setJavascriptPermit(true);  // 如果网页需要使用Javascript,增加此行;如何使用Javascript下文有详细介绍
        webView.setWebAgent(new MyWebAgent());
        final String url = "https://blog.csdn.net/Cyril_KI"; // EXAMPLE_URL由开发者自定义
        webView.load(url);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent keyEvent) {
        Navigator navigator = webView.getNavigator();
        if(keyCode == keyEvent.KEY_BACK && navigator.canGoBack()) {
            navigator.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, keyEvent);
    }

    class MyWebAgent extends WebAgent {
        public static final String EXAMPLE_URL = "...";
        @Override
        public boolean isNeedLoadUrl(WebView webview, ResourceRequest request) {
            if (request == null || request.getRequestUrl() == null) {
                return false;
            }
            Uri uri = request.getRequestUrl();
            if (uri.getDecodedHost().equals(EXAMPLE_URL)) {
                return false;
            } else {
                return super.isNeedLoadUrl(webview, request);
            }
        }
    }
}
转载请注明:文章转载自 http://www.konglu.com/
本文地址:http://www.konglu.com/it/342915.html
免责声明:

我们致力于保护作者版权,注重分享,被刊用文章【HarmonyOS:WebView中按返回键不能返回到上一界面】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2023 成都空麓科技有限公司

ICP备案号:蜀ICP备2023000828号-2