首页 > 其他分享 >【HarmonyOS】元服务WebView组件 H5使用localstorage

【HarmonyOS】元服务WebView组件 H5使用localstorage

时间:2023-04-28 10:58:59浏览次数:37  
标签:String public H5 HarmonyOS localstorage void localStorage webview WebView

在日常开发中我们会在应用种接入H5网页,localStorage作为H5本地存储web storage特性的API之一,主要作用是将数据保存在客户端中。对于快速开发元服务,通过WebView组件运行H5如何使用localstorage呢?下文以API7 JavaUI为例为大家做相关的讲解。

 

【实现步骤】

第一步、配置WebView

首先我们需要配置WebView组件,这也是最重要的一步。代码如下:

webview = (WebView) findComponentById(ResourceTable.Id_webview);
webview.getWebConfig().setJavaScriptPermit(true);
webview.getWebConfig().setWebStoragePermit(true);

 

其中setJavaScriptPermit设置在WebView中启用JavaScript

setWebStoragePermit这一步很重要,用于开启H5 DOM存储,没有这个方法就不能在H5中启用localStorage

第二步、写入localStorage值

为了方便测试我这边使用的是本地的html文件,在页面加载完成时通过js写入localStorage:

webview.setWebAgent(new WebAgent(){
   @Override
   public void onPageLoaded(WebView view, String url) {
       super.onPageLoaded(view, url);
       webview.executeJs("window.localStorage.setItem('" + key + "','" + val + "');", new AsyncCallback<String>() {
           @Override
           public void onReceive(String value) {
               System.out.println(value);
           }
       });
   }

});
webview.load(URL_LOCAL);

 

这样我们就写入了一个键值对,这个键值对我们在初始化的时候给他赋值:

String key = "key1";
String val = "123456789";

第三步、通过写入的key获取localStorage中的val值

String js = "window.localStorage.getItem('" + key + "');";
webview.executeJs(js, new AsyncCallback<String>() {
   @Override
   public void onReceive(String value) {
       System.out.println(value);
   }

});

我们可以在需要的地方调用这个方法获取到key对应的val的值,为了方便测试我通过一个按钮来实现,以下时运行结果:

cke_4079.png

获取到的值会在onReceive回调中返回,如上图可以看到我们获取到val的值时123456789,跟我们初始化设置的时候相同

 

【总结】

以上就实现了WebView组件中启用H5 localStorage,以下是完整代码供大家参考

package com.example.webstorage.slice;


import com.example.webstorage.ResourceTable;

import ohos.aafwk.ability.AbilitySlice;

import ohos.aafwk.content.Intent;

import ohos.agp.components.Component;

import ohos.agp.components.webengine.*;


public class MainAbilitySlice extends AbilitySlice {
   private static final String URL_LOCAL = "dataability://com.example.webstorage.DataAbility/resources/rawfile/test.html";
   WebView webview;
   String key = "key1";
   String val = "123456789";
   @Override
   public void onStart(Intent intent) {
       super.onStart(intent);
       super.setUIContent(ResourceTable.Layout_ability_main);
       webview = (WebView) findComponentById(ResourceTable.Id_webview);
       webview.getWebConfig().setJavaScriptPermit(true);
       webview.getWebConfig().setWebStoragePermit(true);

       webview.setWebAgent(new WebAgent(){
           @Override
           public void onPageLoaded(WebView view, String url) {
               super.onPageLoaded(view, url);
               webview.executeJs("window.localStorage.setItem('" + key + "','" + val + "');", new AsyncCallback<String>() {
                   @Override
                   public void onReceive(String value) {
                       System.out.println(value);
                   }
               });
           }
       });
       webview.load(URL_LOCAL);

       findComponentById(ResourceTable.Id_btn_get).setClickedListener(new Component.ClickedListener() {
           @Override
           public void onClick(Component component) {

               String js = "window.localStorage.getItem('" + key + "');";
               webview.executeJs(js, new AsyncCallback<String>() {
                   @Override
                   public void onReceive(String value) {
                       System.out.println(value);
                   }
               });

           }
       });
   }


   @Override
   public void onActive() {
       super.onActive();
   }

   @Override
   public void onForeground(Intent intent) {
       super.onForeground(intent);
   }

}
     欲了解更多更全技术文章,欢迎访问https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh

标签:String,public,H5,HarmonyOS,localstorage,void,localStorage,webview,WebView
From: https://www.cnblogs.com/developer-huawei/p/17361473.html

相关文章

  • 【HarmonyOS】【JS】Tabs如何设置区分TabBar和TabContent的分割线不显示
    【关键字】Tabs,分割线 【问题描述】使用JS开发HarmonyOS应用时,使用Tabs组件,默认自带TabBar和TabContent的蓝色分割线,由于蓝色分割线样式不可设置,若不想要此蓝色分割线,如何去除蓝色分割线? 【问题分析】1、若JS使用Tabs,蓝色分割线为组件自带样式,暂不支持属性支持显示与隐藏......
  • HarmonyOS 3.1系统隐藏的这几个小细节 你都发现了么
    就在前不久,华为发布了搭载HarmonyOS3.1系统的HUAWEI P60系列,精致内核搭配典雅外观,一亮相就获得了众多用户的喜爱。而笔者拿到真机进行上手后,发现HarmonyOS3.1在UX交互体验和视觉感观的打磨上都下足了功夫,包括了系统动效的全面优化,图标圆角细节的打磨,个性化AOD随心设置等等。接......
  • js实现H5网页飘窗
    1.<divstyle="z-index:1000;position:absolute;filter:Alpha(opacity=90);width:100px;padding:10px;border:1pxsolid#333"id="img"align="center"> <ahref="javascript:void(0);"id="popInfo"......
  • 使用 youth5201314:banner 库时出现 ViewPager 或 xandroid 报错
    使用youth5201314:banner这个库的1.4.10版本开发时,Build时报错找不到android.support.v4.view.ViewPager的类文件找不到androidx.fragment.app.Fragment的类文件需要在Project的gradle.properties配置文件中加一行,用于自动迁移第三方库android.enableJetifier=......
  • 【HarmonyOS】自定义组件之JavaUI实现通用标题栏组件
    【关键字】标题栏、常用内置组件整合、JavaUI、自定义组件 【1、写在前面】平时我们在开发一个应用时,我们都知道一个完整的项目中会有很多个页面,而这些页面中会有许多通用的部分,比如通用标题栏、通用Dialog、通用下拉菜单等等,在Android开发中我们可以通过LayoutInflater.from......
  • uniapp 做app与h5开发的问题
    目前产品是使用uniapp做跨平台开发的安卓ios的app以及公众号也就是h5版本基于uniapp的一些api只能提供app端的使用先前的设想是如果有类似下图的接口不支持h5的 就使用html5的api去介入设备控制开始不打算用wxsdk是考虑后续如果要发布到不同平台......
  • vue移动端使用(pdfh5) 组件预览PDF
    1、安装插件npmipdfh52、在页面内引入组件importPdfh5from"pdfh5";import"pdfh5/css/pdfh5.css";3、写一个展示pdf文件的容器  <divid="pdfType"></div>4、封装在事件中 initPdf(){      this.pdfh5=''      this.pdfh......
  • cookie、sessionStorage 和 localStorage
    cookie、sessionStorage和localStoragecookie1.基本概念Cookie是保存在计算机上的一种文件。当我们使用计算机浏览网页时,服务器会生成一个证书并将其返回给我们的计算机。这个证书就是cookie。一般来说,cookie是服务器写给客户端的文件,也可以称为浏览器缓存。简单来说,它可以......
  • centos7 安装bash5.0
    查看自己bash的版本/bin/bash--version下载bash5.0版本wgethttp://ftp.gnu.org/gnu/bash/bash-5.0.tar.gz解压tarzxvfbash-5.0.tar.gz进入目录cdbash-5.0编译./configure&&make&&makeinstall创建软连接mv/bin/bash/bin/bash.bakln-s/usr/local/bin/bash......
  • H5页面新增鼠标右击和长按触发事件
    H5页面新增鼠标右击和长按触发事件,不影响点击事件。示例如下:1.新增触发事件<van-cellclass="list-item"v-for="itemindataSource.list":key="item.id"@touchstart="longPress(item,index)"@touchend="removePress(item,index)"......