Toggle navigation
Toggle navigation
This project
Loading...
Sign in
developOne
/
harmonyPool
Go to a project
Toggle navigation
Projects
Groups
Snippets
Help
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
wangliang_wd
2024-10-29 10:32:51 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
32fc6b952cb9cfda317d7c123734398926e6e522
32fc6b95
1 parent
aa5b00cb
feat:优化华为协议展示问题
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
107 additions
and
1 deletions
sight_harmony/commons/wdWebComponent/Index.ets
sight_harmony/commons/wdWebComponent/src/main/ets/webPool/WebCommonPool.ets
sight_harmony/commons/wdWebComponent/src/main/ets/webPool/WebPoolManager.ets
sight_harmony/features/wdComponent/src/main/ets/ComponentModule.ets
sight_harmony/features/wdLogin/src/main/ets/pages/login/LoginProtocolWebview.ets
sight_harmony/commons/wdWebComponent/Index.ets
View file @
32fc6b9
...
...
@@ -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
...
...
sight_harmony/commons/wdWebComponent/src/main/ets/webPool/WebCommonPool.ets
0 → 100644
View file @
32fc6b9
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);
}
...
...
sight_harmony/commons/wdWebComponent/src/main/ets/webPool/WebPoolManager.ets
View file @
32fc6b9
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 {
...
...
sight_harmony/features/wdComponent/src/main/ets/ComponentModule.ets
View file @
32fc6b9
...
...
@@ -12,5 +12,7 @@ export class ComponentModule {
webController: webviewControl,
webArticleEventHandler: new WebArticleEventHandler(webviewControl)
})
WebPoolManager.sharedInstance().createHuaWeiWeb(context)
}
}
\ No newline at end of file
...
...
sight_harmony/features/wdLogin/src/main/ets/pages/login/LoginProtocolWebview.ets
View file @
32fc6b9
...
...
@@ -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()
...
...
Please
register
or
login
to post a comment