wangliang_wd

feat:优化华为协议展示问题

... ... @@ -5,3 +5,4 @@ export { WdWebLocalComponent } from './src/main/ets/pages/WdWebLocalComponent'
export { WebEvents, WebNodeController } from './src/main/ets/webPool/WebLocalPool'
export { WebPoolManager } from './src/main/ets/webPool/WebPoolManager'
export { WebArticleEventHandler } from './src/main/ets/webPool/WebArticleEventHandler'
export { getNWeb, H5NodeController,createNWeb } from './src/main/ets/webPool/WebCommonPool'
\ No newline at end of file
... ...
import { UIContext } from '@kit.ArkUI';
import { webview } from '@kit.ArkWeb';
import { NodeController, BuilderNode, Size, FrameNode } from '@kit.ArkUI';
class Data {
url: string = ''
controller:WebviewController
constructor(url: string, controller: WebviewController,) {
this.url = url
this.controller = controller
}
}
const TAG = 'WebCommonPool';
// @Builder中为动态组件的具体组件内容
// Data为入参封装类
// 调用onActive,开启渲染
@Builder
function WebBuilder(data:Data) {
Column() {
Web({ src: data.url, controller: data.controller })
.onPageBegin(() => {
data.controller.onActive();
})
.width("100%")
.height("100%")
}
}
let wrap = wrapBuilder<Data[]>(WebBuilder);
// 用于控制和反馈对应的NodeContianer上的节点的行为,需要与NodeContainer一起使用
export class H5NodeController extends NodeController {
private rootnode: BuilderNode<Data[]> | null = null;
// 必须要重写的方法,用于构建节点数、返回节点挂载在对应NodeContianer中
// 在对应NodeContianer创建的时候调用、或者通过rebuild方法调用刷新
makeNode(uiContext: UIContext): FrameNode | null {
console.log(" uicontext is undifined : "+ (uiContext === undefined));
if (this.rootnode != null) {
// 返回FrameNode节点
return this.rootnode.getFrameNode();
}
// 返回null控制动态组件脱离绑定节点
return null;
}
// 当布局大小发生变化时进行回调
aboutToResize(size: Size) {
console.log("aboutToResize width : " + size.width + " height : " + size.height )
}
// 当controller对应的NodeContainer在Appear的时候进行回调
aboutToAppear() {
console.log("aboutToAppear")
}
// 当controller对应的NodeContainer在Disappear的时候进行回调
aboutToDisappear() {
console.log("aboutToDisappear")
}
// 此函数为自定义函数,可作为初始化函数使用
// 通过UIContext初始化BuilderNode,再通过BuilderNode中的build接口初始化@Builder中的内容
initWeb(url:string, uiContext:UIContext, control:WebviewController) {
if(this.rootnode != null)
{
return;
}
// 创建节点,需要uiContext
this.rootnode = new BuilderNode(uiContext)
// 创建动态Web组件
this.rootnode.build(wrap, { url:url, controller:control })
}
}
// 创建Map保存所需要的NodeController
let NodeMap:Map<string, H5NodeController | undefined> = new Map();
// 创建Map保存所需要的WebViewController
let controllerMap:Map<string, WebviewController | undefined> = new Map();
// 初始化需要UIContext 需在Ability获取
export const createNWeb = (url: string, uiContext: UIContext) => {
// 创建NodeController
let baseNode = new H5NodeController();
let controller = new webview.WebviewController() ;
// 初始化自定义web组件
baseNode.initWeb(url, uiContext, controller);
controllerMap.set(url, controller)
NodeMap.set(url, baseNode);
}
// 自定义获取NodeController接口
export const getNWeb = (url : string) : H5NodeController | undefined => {
return NodeMap.get(url);
}
... ...
import { BridgeWebViewControl } from "wdJsBridge"
import { AppUtils } from "wdKit"
import { createReuseableWeb, destoryReuseableWeb, getPoolWebNodeController, WebNodeController } from "./WebLocalPool"
import { createNWeb} from "./WebCommonPool"
import { util } from "@kit.ArkTS"
import { WebArticleEventHandler } from "./WebArticleEventHandler"
... ... @@ -41,6 +42,12 @@ export class WebPoolManager {
return target
}
createHuaWeiWeb(uiContext: UIContext){
createNWeb('https://privacy.consumer.huawei.com/legal/id/authentication-terms.htm?code=CN&language=zh-CN', uiContext)
}
// 取一个可用的target,不存在则根据参数创建
// 当使用完成,需要调用recycleTarget()
takeAvaiableArticleWebTarget(param: ArticleWebInterface): string {
... ...
... ... @@ -12,5 +12,7 @@ export class ComponentModule {
webController: webviewControl,
webArticleEventHandler: new WebArticleEventHandler(webviewControl)
})
WebPoolManager.sharedInstance().createHuaWeiWeb(context)
}
}
\ No newline at end of file
... ...
... ... @@ -3,8 +3,9 @@ import webview from '@ohos.web.webview';
import { SpConstants } from 'wdConstant/Index';
import { Logger, NetworkUtil, SPHelper } from 'wdKit';
import { Params } from '../../../../../../../commons/wdRouter/oh_modules/wdBean/src/main/ets/bean/content/Params';
import { WebArticleEventHandler, WebPoolManager } from 'wdWebComponent';
import { EmptyComponent } from './EmptyComponent';
import {getNWeb} from "wdWebComponent/Index"
const TAG = 'LoginProtocolWebview';
... ... @@ -77,6 +78,9 @@ struct LoginProtocolWebview {
.height(1)
if(this.isConnectNetwork){
if(this.contentID == "4"){ //华为用户认证协议
NodeContainer(getNWeb(this.webUrl)).backgroundColor(Color.White)
}else {
Web({ src: this.webUrl, controller: this.webviewController })
.backgroundColor(Color.White)
.domStorageAccess(true)
... ... @@ -91,6 +95,7 @@ struct LoginProtocolWebview {
Logger.info(TAG, 'onHttpErrorReceive event.response.getResponseCode:' + event?.response.getResponseCode());
})
.padding({bottom:this.contentID === "2" ? "40lpx" : 0 })
}
}else{
EmptyComponent({ emptyType: 1,emptyHeight:"100%" ,retry: () => {
this.isConnectNetwork = NetworkUtil.isNetConnected()
... ...