惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
News | PayPal Newsroom
Security Archives - TechRepublic
Security Archives - TechRepublic
Hacker News: Ask HN
Hacker News: Ask HN
H
Hacker News: Front Page
Apple Machine Learning Research
Apple Machine Learning Research
TaoSecurity Blog
TaoSecurity Blog
Help Net Security
Help Net Security
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
V
V2EX
Hugging Face - Blog
Hugging Face - Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
人人都是产品经理
人人都是产品经理
博客园 - 三生石上(FineUI控件)
Security Latest
Security Latest
Cloudbric
Cloudbric
WordPress大学
WordPress大学
S
SegmentFault 最新的问题
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Know Your Adversary
Know Your Adversary
A
Arctic Wolf
L
LangChain Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
The GitHub Blog
The GitHub Blog
P
Proofpoint News Feed
W
WeLiveSecurity
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
M
MIT News - Artificial intelligence
Google DeepMind News
Google DeepMind News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Cloudflare Blog
小众软件
小众软件
NISL@THU
NISL@THU
云风的 BLOG
云风的 BLOG
P
Privacy & Cybersecurity Law Blog
S
Security @ Cisco Blogs
博客园 - 【当耐特】
I
InfoQ
Vercel News
Vercel News
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
P
Proofpoint News Feed
O
OpenAI News
Google DeepMind News
Google DeepMind News
N
News and Events Feed by Topic
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
K
Kaspersky official blog
T
Threat Research - Cisco Blogs
量子位
宝玉的分享
宝玉的分享

u3blog

从手动配置到自然语言生成规则:一个 Android AI 工具的重构实录 - u3blog 学习版游戏自制云存档同步的方法探索以及总结 - u3blog ChatGPT是怎么帮我写ios代码的 - u3blog Android项目cicd流程总结(使用jenkins) - u3blog Android使用Logger开发App本地日志记录功能 - u3blog 一张启动图引发的思考--探索.9图原理和应用场景 - u3blog 跟我一起玩Paging3 - u3blog Android中使用ASPECTJ进行用户操作路径跟踪与日志搜集 - u3blog 彻底摆脱数据线——远程ADB调试小工具开发过程记录 - u3blog 自己实现一个Android网络图片加载器 - u3blog
鸿蒙next中web组件和navigation的一个bug以及处理方案 - u3blog
2024-08-30 · via u3blog

问题现象

在这种情况下,把controller从上层传递到最底层的web页面,用它来打开网页

刚开始一切正常,但是需要执行一些js的时候,就会出现controller未绑定的提示

特别是在连续打开好几个页面之后,从最顶部页面返回,在中间的页面就会出现该问题

例如a-b-c-d,此时从d返回c,再在c页面使用controller执行js方法,就会出现controller未绑定到webview的提示

但是此时,controller肯定是绑定过的,出现该问题是不合理的。

现象报错

简要代码

homepage

  -HomeNavigation

homenavigation

  -Navigation

    -stack

        -mywebview(在这里new webviewcontroller())

mywebview

  -mywebcore(传递controller)

mywebcore

  -web(最终的使用controller)

  -button1 打开新页面

  -button2 返回上一页并执行一段自定义js

现在我不断的点击button1使用navigation打开多个新页面,再不断点击返回,即可出现问题

排查步骤

1.首先排查是否在往navigation中添加和移除页面的过程中,是否发生了对象的销毁,经过对比对象id号,发现id未变化,说明对象不存在销毁的问题

2.排查该报错出现的原因,经过网络搜索,发现未绑定问题只会出现在new了controller但是还未传递给web组件的时候,但是我们已经打开了网页,所以肯定是绑定过的

3.经过1,2的排查,我们可以推断,这是一个系统级的bug,所以我们需要特殊管理controller

尝试解决

新建一个全局的map,当有新页面打开的时候,把对应的controller放入该map,当页面销毁时,把controller从中移除

代码改造,经过如下改造,我们已经对controller进行了单独的管理

解决代码

import web_webview from '@ohos.web.webview';
import { HashMap } from '@kit.ArkTS';

export let controllers:HashMap<string,web_webview.WebviewController> = new HashMap<string,web_webview.WebviewController>()

效果测试

改造之后,再看我们的项目运行情况,发现每次都能顺利的执行了,不再会出现未绑定的情况

结论

目前将webviewcontroller作为页面跳转参数传递,在navigation中存在bug,会导致对象的绑定状态混乱,令其无法成功调用方法。

我们需要单独使用全局的管理策略,这样可以暂时规避controller状态混乱的情况

问题本质

该问题的本质还是鸿蒙next系统在传递controller的过程中,该对象的绑定状态会丢失,判定为一个系统bug,需要等后续修复。

本文正在参加华为鸿蒙有奖征文征文活动