鸿蒙开发(17)---WebView组件

本文介绍了在鸿蒙OS中使用WebView组件的基本用法,包括如何防止WebView跳转到浏览器,设置JavaScript支持,以及如何实现网页与App的交互。通过示例代码展示了网页调用App方法和App调用网页方法的实现,同时也提到了如何在资源文件中引用网页内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

WebView组件

在实际的App开发中,我们往往还会直接跳转到网页。比如微信人家给你发了一个链接,默认也是在App之内打开的。

当然,很多公司的App就只使用一个WebView作为整体框架,比如我们常用的读书App:掌阅等。这样开发的好处是,只要使用少量的代码即可完成交互。

所以,今天我们将来介绍鸿蒙App的WebView组件的使用方式。

基本用法

首先,与前面讲解的其他组件一样,这里通过XML布局文件进行操作。示例代码如下:

<ohos.agp.components.webengine.WebView
    ohos:id="$+id:ability_main_webview"
    ohos:height="match_parent"
    ohos:width="match_parent"/>

需要注意的是,博主这里输入的是ohos.agp.components.webengine.WebView,你直接输入WebView也是有提示的。

不过,WebView与ohos.agp.components.webengine.WebView并不等价,这可能是鸿蒙的一个漏洞,直接输入WebView并不能使用这个组件。

接下来,就需要加载我们的网页进行显示,代码如下所示:

public class MainAbilitySlice extends AbilitySlice {
   
   
    private WebView webView;
    @Override
    public void onStart(Intent intent) {
   
   
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);
        this.webView=(WebView)findComponentById(ResourceTable.Id_ability_main_webview);
        this.webView.load("https://www.baidu.com");
    }
}

很简单,我们使用load()函数进行网页的加载。不过,在主界面,直接这么加载是不会显示任何东西的。

防止WebView跳转到浏览器

这是因为,鸿蒙默认的WebView组件是直接跳转到浏览器的,而你在主页这么做,那连显示都不必,何必安装App呢?

所以,我们需要禁止WebView跳转到浏览器,它才可能在主页显示这个组件。而它的setWebAgent()方法就是防止跳转浏览器的。示例如下:

public class MainAbilitySlice extends AbilitySlice {
   
   
    private WebView webView;
    @Override
    public void onStart(Intent intent) {
   
   
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);
        this.webView=(WebView)findComponentById(ResourceTable.Id_ability_main_webview);
        this.webView.setWebAgent(new WebAgent(){
   
   
            @Override
            public boolean isNeedLoadUrl(WebView webView, ResourceRequest request) 
鸿蒙系统开发中,WebView 是一个用于加载网页内容的组件,支持加载本地 HTML 文件或网络 URL,并能够与生应用进行交互。通过 WebView开发者可以在鸿蒙应用中无缝嵌入网页内容[^1]。 ### 加载本地 HTML 文件 若需要加载本地存储的 HTML 文件,可以使用 `loadUrl` 方法,并传入文件路径作为参数。例如: ```java webView.loadUrl("file:///data/storage/el2/base/haps/cache/local_content.html"); ``` 此方法适用于将静态资源打包进应用内,便于离线访问和快速加载。 ### 加载远程网页 对于从服务器获取的网页内容,同样可以使用 `loadUrl` 方法加载网络地址: ```java webView.loadUrl("https://example.com/rich_text_content.html"); ``` 需要注意的是,在加载远程网页时应确保网络权限已正确配置,并处理可能出现的加载延迟问题。 ### 使用 `loadDataWithBaseURL` 加载 HTML 字符串 当需要直接加载 HTML 字符串(如富文本内容)时,推荐使用 `loadDataWithBaseURL` 方法,以避免额外的网络请求并提升性能: ```java String htmlContent = "<html><body><h1>Hello, World!</h1></body></html>"; webView.loadDataWithBaseURL(null, htmlContent, "text/html", "UTF-8", null); ``` 该方法允许指定基础 URL 以解决相对路径问题,同时支持自定义 MIME 类型和字符编码。 ### 设置 Cookie 以支持受保护资源 如果 HTML 内容包含需要身份验证才能访问的资源,则可以通过设置 Cookie 的方式为 WebView 提供认证信息: ```java // 假设已经获取到了cookie字符串 String cookie = "sessionid=your_session_id"; CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptCookie(true); cookieManager.setCookie("https://example.com", cookie); // 设置对应的cookie // 确保cookie被正确应用 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { cookieManager.flush(); } else { CookieSyncManager.createInstance(context).sync(); } // 加载含有需验证资源的HTML webView.loadUrl("https://example.com/protected_content.html"); ``` 这样可以保证 WebView 在加载资源时携带正确的认证信息。 ### 性能优化建议 - **内存管理**:由于 WebView 较为消耗内存,应在不再需要时释放相关资源。 - **缓存策略**:合理利用缓存机制,如启用磁盘缓存,可提高性能并减少流量消耗。 - **预加载**:根据实际场景考虑是否提前加载部分内容,以便加快展示速度。 ### 注意事项 - 鸿蒙系统的 WebView 支持 JavaScript 脚本执行,但需谨慎处理不可信来源的内容,以防安全风险。 - 开发过程中应注意兼容性问题,尤其是不同设备版本之间的差异。 - 若需集成地图等复杂功能,可尝试使用 JS API 方式实现,尽管可能会遇到各种兼容性和报错问题[^2]。
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李元静

您的鼓励就是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值