在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); } } } }