场景

  在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()方法进行返回。

布局文件

<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayoutxmlns:ohos="http://schemas.huawei.com/res/ohos"ohos:height="match_parent"ohos:width="match_parent"ohos:alignment="center"ohos:orientation="vertical"><ohos.agp.components.webengine.WebViewohos:id="$+id:web_view"ohos:height="match_parent"ohos:width="match_parent"></ohos.agp.components.webengine.WebView></DirectionalLayout>

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;@Overridepublic 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);}@Overridepublic 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 = "...";@Overridepublic 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);}}}
}

HarmonyOS:WebView中按返回键不能返回到上一界面相关推荐

  1. Android-完美解决在Activity中触摸返回键onBackPressed不能触发问题

    场景:在一个只有WebView组件的Activity中如何正确处理页面的返回? 之前思路是覆写Activity的onBackPressed方法,因为用户触摸"返回键"会触发该方法: ...

  2. 【Android】Android中屏蔽返回键,home键以及其他实体按键

    屏蔽键重写activiy的两个方法就行 屏蔽返回键 public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { ...

  3. android webview点击返回键返回上一页

    重写两个返回方法即可: @Override public void onBackPressed() {if (webView.canGoBack()) {webView.goBack();webVie ...

  4. 在firefox中backspace返回键不能回到之前的页面

    在centos 6.3中使用firefox浏览网页,想回到之前浏览过的一页,按backspace返回键没有发应. 解决办法: 在地址上输入:"about:config" ,然后在& ...

  5. Android WebView点击返回键回到上一个html

    1.监听系统返回键,如果有上个html则返回,否则退出这个界面: @Override public boolean onKeyDown(int keyCode, KeyEvent event) {if ...

  6. android 屏蔽实体按键,Android中屏蔽返回键,home键以及其他实体按键

    屏蔽键重写activiy的两个方法就行 屏蔽返回键 public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { ...

  7. 实现qq中按返回键返回桌面不退出程序

    在实际应用中,很可能我们希望自己的app在按下返回键的时候并不退出,而是像按home键一样仅仅返回桌面,而程序仍然在后台运行着.要怎么实现这个效果呢?很简单,只需要重写一下onBackPressed方 ...

  8. H5中安卓返回键拦截

    需求描述:在h5页面中弹出提示框等模态框时,点击路由回退(安卓返回键等)未关闭模态框而是路由进行了回退,此方法在监测到回退操作时进行了一次拦截并抛出一个事件进行自定义操作 拦截方法封装: export ...

  9. Android—— 手机返回键到主界面,不关闭APP

    [背景]:需要实现类似QQ.微信那样,按手机返回键时不退出APP,而是返回到手机主界面 [实现原理]:在主活动中覆写onKeyDown()方法,当检测到返回键被触发时,通过Intent直接进入主界面. ...

最新文章

  1. pytest框架安装(MacOS)
  2. SpringMVC深度探险(三) —— DispatcherServlet与初始化主线
  3. web service security profile的设计
  4. 又到618,.NET 千万级秒杀架构到底有多牛
  5. shiro 升级_小米11消息再次确认:骁龙875有独占期,超广角镜头大升级
  6. 最新dotCMS SQL注入漏洞 攻击者可获得敏感数据 绿盟科技发布安全威胁通告
  7. R语言安装ccgarch_R语言基于ARMA-GARCH过程的VaR拟合和预测
  8. 如何使用scikit-learn工具来进行PCA降维
  9. CDH6离线安装教程
  10. 终于讲透了,史上最详细的RS485自动收发电路你一定要掌握
  11. ChainX 主网预演暨第三届创世节点大赛正式启动
  12. kali linux修改dns,Kali Linux 设置动/静态IP地址以及修改DNS
  13. 传奇私服服务器移动玩家位置,传奇私服服务端里面哪个是玩家数据文件文件?...
  14. ota升级 rk3399_RK3399 的ota升级方法
  15. OSPF的LSA类型 ——连载四ASBR汇总LSA
  16. Aleo的PoSW共识
  17. 领导的沉默,背后到底隐藏着什么?
  18. hiveserver2 和beeline_Beeline连接Hiveserver2错误
  19. 计算机c盘如何腾出空间,WIN8的C盘太大怎么清理腾出空间呢
  20. 学习笔记:Spring中default-autowire与autowire区别

热门文章

  1. 汉诺塔:动画过程绘制实现
  2. 关于FFMPEG中的filter滤镜的简单介绍
  3. 深圳东方英文书院顺利通过IB五年评估
  4. 系统稳定性建设的一些感想
  5. 预案三板斧之降级大法
  6. 假期余额查询 2021-04-30
  7. 「上层建筑」与「结构基础」~不被迷惑
  8. drupal 7 启用 签名设置 filtered html,微软开放技术 发布并开源适用于 Drupal 7 的必应地图插件...
  9. 2017中石计算机网络基础试题答案,石大远程2017春计算机网络原理(含模拟实验)作业三...
  10. STM32F1 SHT3x温湿度模块