在离线场景NodeController中创建webview组件

创建预先指定url的webview可以,但是后续在真实使用时如何再获取到web组件并进行后续的数据更新以及jsbridge通信?

场景中需要使用webController再进行后续的操作,并且无法预知具体要加载哪个url。测试发现创建webview组件非常慢,可否只预先创建webview,使能够获取到webview?

HarmonyOS
2024-05-07 22:00:59
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
dushinongmin

动态创建组件已支持,请参考以下链接:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/web-page-loading-with-web-components-0000001820999889#ZH-CN_TOPIC_0000001820999889__动态创建web组件

1.可以根据业务逻辑提炼共同的模板,一般共同的模块的页面的url基本一致只是最后可能有个id不一样,可以通过预先加载这个模块,然后再通过具体的url里面的id去加载数据.

2.动态创建web组件就是预先创建webview。不一定要url,可以传空.

3.怎么获取webview,依赖业务自己怎么存储和管理webview,示例中是以url作为key值存在map里,所以就通过url去拿,业务自己可以用不同的逻辑去管理webview

4.有WebviewController,可以对web组件做操作

提供核心代码如下:

@Builder 
export function WebBuilder(builderData: BuilderData) { 
  Column() { 
    Text('WebBuilder内部') 
    Web({ src: builderData.url, controller: builderData.controller }) 
      .fileAccess(true) 
      .domStorageAccess(true) 
      .mixedMode(MixedMode.All) 
      .databaseAccess(true) 
      .geolocationAccess(true) 
      .javaScriptAccess(true) 
      .onClick(event => { 
        Logger.info("11111111111") 
      }) 
      .onConsole((event) => { 
        Logger.info(TAG, '[WEB] : ' + event?.message.getMessage()); 
        // This interface is used to notify the host application of the JS console message. 
        // If true is returned, the message is printed to the console. 
        return false 
      }) 
      .zoomAccess(false)// 设置是否支持手势进行缩放,默认允许执行缩放。 
      .horizontalScrollBarAccess(false)// 设置是否显示横向滚动条,默认显示。 
      .onInterceptRequest((event) => { 
        if (event) { 
          return GlobalRouter.getInstance().onInterceptRequest(event.request); 
        } 
        return null; 
      }) 
      .onPageVisible(() => { 
        if (RouterStorage.getInstance().getRouteType() !== RouteType.MULTI_MULTI) { 
          NavigationController.getInstance().loading(false) 
        } 
        Logger.info(TAG, '[WEB] : onPageVisible'); 
      }) 
      .onPageEnd(() => { 
        if (RouterStorage.getInstance().getRouteType() === RouteType.MULTI_MULTI) { 
          NavigationController.getInstance().loading(false) 
        } 
        Logger.info(TAG, '[WEB] : onPageEnd'); 
      }) 
      .onResourceLoad((event) => { 
        //Logger.info(TAG, '[WEB] : onResourceLoad : ' + event.url); 
      }) 
      .onLoadIntercept((event) => { 
        if (event) { 
          return GlobalRouter.getInstance().router(event.data); 
        } 
        return false; 
      }) 
      .onPageBegin(() => { 
        Logger.info(TAG, '[WEB] : onPageBegin'); 
      }) 
 
      .javaScriptOnDocumentStart([{ 
        script: JsBridge.getJsBridgeScript(builderData.webId.toString()), scriptRules: [Constant.ASTERISK] }]) 
      .onControllerAttached(() => { 
        builderData.controller.registerJavaScriptProxy(WebAdapter.getInstance(), Constant.WEB_ADAPTER, [Constant.RUN]); 
        Logger.info(TAG, '[WEB] : onControllerAttached'); 
      }) 
  }
分享
微博
QQ
微信
回复
2024-05-08 15:58:08
相关问题
离线webview组件有没有相关使用文档
172浏览 • 1回复 待解决
如何解决webview离线加载白屏问题
60浏览 • 1回复 待解决
javaUI webview通过布局创建实例失败
3954浏览 • 1回复 待解决
注册的自定义字体 webview 无效
396浏览 • 1回复 待解决
什么场景需要创建多个UIAbility
328浏览 • 1回复 待解决
创建的JS项目如何使用webview
3019浏览 • 1回复 待解决
怎样根目录创建文件夹
2290浏览 • 1回复 待解决
嵌套组件Scroll不生效
211浏览 • 1回复 待解决
huawei webview 组件下载地址
7452浏览 • 2回复 待解决
富文本web组件无法展示
152浏览 • 1回复 待解决
MongoDB如何创建一个新的数据库?
2109浏览 • 1回复 待解决
TextInput组件获取焦点的几种场景
444浏览 • 1回复 待解决
如何在自定义函数创建一个UI组件
330浏览 • 1回复 待解决