zhenghy
... ... @@ -21,6 +21,12 @@ interface dataObject {
method?: string
url?: string
parameters?: object
videoUrl?: string
positionWidth?: string
positionHeight?: string
positionLeft?: string
positionTop?: string
videoLandscape?: string
}
/**
... ...
import router from '@ohos.router';
import { BridgeHandler, BridgeUtil, BridgeWebViewControl, Callback } from 'wdJsBridge';
import { BridgeUtil, BridgeWebViewControl, Callback } from 'wdJsBridge';
import { Logger } from 'wdKit/Index';
import { setDefaultNativeWebSettings } from './WebComponentUtil';
import { Action } from 'wdBean';
import { performJSCallNative } from './JsBridgeBiz';
import { H5CallNativeType } from './H5CallNativeType';
import { Message } from 'wdJsBridge/src/main/ets/bean/Message';
... ... @@ -12,11 +10,18 @@ const TAG = 'WdWebLocalComponent';
@Component
export struct WdWebLocalComponent {
webviewControl: BridgeWebViewControl = new BridgeWebViewControl()
onWebPrepared: () => void = () => {}
onWebPrepared: () => void = () => {
}
@Prop backVisibility: boolean = false
@Prop webResource: Resource = {} as Resource
@State webHeight: string | number = '100%'
@Link isPageEnd: boolean
@State videoUrl: string = ''
@State positionWidth: number = 0
@State positionHeight: number = 0
@State positionLeft: number = 0
@State positionTop: number = 0
@State videoLandscape: string = '1'
build() {
Column() {
... ... @@ -33,6 +38,8 @@ export struct WdWebLocalComponent {
.height(44)
.visibility(this.backVisibility ? Visibility.Visible : Visibility.None)
Row() {
RelativeContainer() {
Web({ src: this.webResource, controller: this.webviewControl })
.domStorageAccess(true)
.databaseAccess(true)
... ... @@ -64,6 +71,30 @@ export struct WdWebLocalComponent {
}
return this.onLoadIntercept(event.data.getRequestUrl().toString());
})
.id('web')
.alignRules({
top: { anchor: "__container__", align: VerticalAlign.Top },
})
if (this.videoUrl) {
Video({ src: this.videoUrl })
.autoPlay(true)
.width(this.positionWidth)
.height(this.positionHeight)
.borderRadius(5)
.alignRules({
top: { anchor: "__container__", align: VerticalAlign.Top },
})
.offset({
x: this.positionLeft,
y: this.positionTop
})
.id("video")
}
}
}.width('100%')
.height(this.webHeight)
}
}
... ... @@ -73,7 +104,8 @@ export struct WdWebLocalComponent {
let handleName = H5CallNativeType.JsCallTypeList[i];
let handle = (data: Message, f: Callback) => {
Logger.debug('registerHandlers handlerName: ' + JSON.stringify(data.data))
this.setCurrentPageOperate(data)
this.setCurrentPageOperate8(data)
this.setCurrentPageOperate9(data)
this.defaultPerformJSCallNative(data, f)
};
this.webviewControl.registerHandler(handleName, { handle: handle });
... ... @@ -81,7 +113,7 @@ export struct WdWebLocalComponent {
}
//webview 高度设置
private setCurrentPageOperate: (data: Message) => void = (data) => {
private setCurrentPageOperate8: (data: Message) => void = (data) => {
if (data.handlerName === H5CallNativeType.jsCall_currentPageOperate && data?.data?.operateType === '8') {
if (typeof this.webHeight === 'number') {
if (Number(data?.data?.webViewHeight) > this.webHeight) {
... ... @@ -93,6 +125,17 @@ export struct WdWebLocalComponent {
}
}
}
//播放视频
private setCurrentPageOperate9: (data: Message) => void = (data) => {
if (data.handlerName === H5CallNativeType.jsCall_currentPageOperate && data?.data?.operateType === '9') {
this.videoUrl = data?.data?.videoUrl || ''
this.positionWidth = Number(data?.data?.positionWidth) || 0
this.positionHeight = Number(data?.data?.positionHeight) || 0
this.positionLeft = Number(data?.data?.positionLeft) || 0
this.positionTop = Number(data?.data?.positionTop) || 0
this.videoLandscape = data?.data?.videoLandscape || '1'
}
}
/**
* 默认【CallNative】逻辑处理
*/
... ...
... ... @@ -20,6 +20,7 @@ import { WDRouterPage, WDRouterRule } from 'wdRouter/Index';
import { MultiPictureDetailViewModel } from '../viewmodel/MultiPictureDetailViewModel';
import { PageRepository } from '../repository/PageRepository';
import { detailedSkeleton } from './skeleton/detailSkeleton';
import { CommentComponent } from '../components/comment/view/CommentComponent'
const PATTERN_DATE_CN_RN: string = 'yyyy年MM月dd日 HH:mm';
... ... @@ -76,7 +77,6 @@ export struct ImageAndTextPageComponent {
Column() {
// 点赞
if (this.contentDetailData[0]?.openLikes) {
// 点赞
Row() {
Row() {
if (this.newsStatusOfUser?.likeStatus === '1') {
... ... @@ -116,13 +116,17 @@ export struct ImageAndTextPageComponent {
if (this.recommendList.length > 0) {
RecommendList({ recommendList: this.recommendList })
}
// 评论
if(this.contentDetailData[0]?.openComment){
}
}
}
}
.width(CommonConstants.FULL_WIDTH)
.height(CommonConstants.FULL_HEIGHT)
.padding({ bottom: 76 })
.padding({ bottom: 126 })
.scrollBar(BarState.Off)
if (!this.isPageEnd) {
... ...
... ... @@ -96,7 +96,6 @@ export struct ImageAndTextWebComponent {
backVisibility: false,
onWebPrepared: this.onWebPrepared.bind(this),
isPageEnd: $isPageEnd
})
}
}
... ...
... ... @@ -27,6 +27,7 @@ export struct PageComponent {
@Link @Watch('onChange') currentTopNavSelectedIndex: number
// 自动刷新通知
@Prop @Watch('onAutoRefresh') autoRefresh: number = 0
private listScroller: Scroller = new Scroller();
build() {
Column() {
... ... @@ -61,7 +62,7 @@ export struct PageComponent {
ListLayout() {
RelativeContainer() {
List() {
List({ scroller: this.listScroller }) {
// 下拉刷新
ListItem() {
RefreshLayout({
... ... @@ -235,6 +236,7 @@ export struct PageComponent {
}
// 当前页面,自动刷新数据
Logger.debug(TAG, 'page onAutoRefresh ' + this.autoRefresh)
this.listScroller.scrollToIndex(0)
autoRefresh(this.pageModel, this.pageAdvModel)
}
... ...