feat(XWebview): 添加网页预览功能并优化错误处理
- 新增 openPreview 方法实现网页预览功能 - 优化 XWebview 组件,支持缩放和错误处理 - 改进 AuthorizeSignOrderDetailView 中的网页加载逻辑 - 统一错误处理,提高用户体验
这个提交包含在:
父节点
788e449b25
当前提交
d4eb5cb934
@ -15,6 +15,7 @@ import { SZYXLocalStorageKeys } from '../utils/SZYXLocalStorageKeys';
|
|||||||
export struct XWebview {
|
export struct XWebview {
|
||||||
// 手机号
|
// 手机号
|
||||||
@State url?: string = (router.getParams() as XWebParams).url
|
@State url?: string = (router.getParams() as XWebParams).url
|
||||||
|
@State zoomAccess?: boolean = (router.getParams() as XWebParams).zoomAccess
|
||||||
@State content?: string = (router.getParams() as XWebParams).content
|
@State content?: string = (router.getParams() as XWebParams).content
|
||||||
@State title?: string = (router.getParams() as XWebParams).title
|
@State title?: string = (router.getParams() as XWebParams).title
|
||||||
@State closeTag?: string = (router.getParams() as XWebParams).closeTag
|
@State closeTag?: string = (router.getParams() as XWebParams).closeTag
|
||||||
@ -122,7 +123,7 @@ export struct XWebview {
|
|||||||
.height('100%')
|
.height('100%')
|
||||||
.visibility(this.errorInfo == null ? Visibility.Visible : Visibility.None)
|
.visibility(this.errorInfo == null ? Visibility.Visible : Visibility.None)
|
||||||
.mixedMode(MixedMode.All)//允许加载HTTP和HTTPS混合内容
|
.mixedMode(MixedMode.All)//允许加载HTTP和HTTPS混合内容
|
||||||
.zoomAccess(false)//不支持手势进行缩放
|
.zoomAccess(this.zoomAccess??false)//不支持手势进行缩放
|
||||||
.mediaPlayGestureAccess(false)//有声视频播放不需要用户手动点击
|
.mediaPlayGestureAccess(false)//有声视频播放不需要用户手动点击
|
||||||
.cacheMode(CacheMode.Default)//设置缓存模式
|
.cacheMode(CacheMode.Default)//设置缓存模式
|
||||||
.onConfirm((event) => { // 自定义Confirm弹窗
|
.onConfirm((event) => { // 自定义Confirm弹窗
|
||||||
@ -177,28 +178,28 @@ export struct XWebview {
|
|||||||
console.log('mimetype:' + event.mimetype)
|
console.log('mimetype:' + event.mimetype)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.onErrorReceive((event) => { // 加载失败
|
// .onErrorReceive((event) => { // 加载失败
|
||||||
if (this.progress > 65) {
|
// if (this.progress > 65) {
|
||||||
return
|
// return
|
||||||
}
|
// }
|
||||||
if (event) {
|
// if (event) {
|
||||||
this.errorInfo = `错误码:${event.error.getErrorCode()}\n${event.error.getErrorInfo()}`
|
// this.errorInfo = `错误码:${event.error.getErrorCode()}\n${event.error.getErrorInfo()}`
|
||||||
} else {
|
// } else {
|
||||||
this.errorInfo = '错误码:-1\n未知错误'
|
// this.errorInfo = '错误码:-1\n未知错误'
|
||||||
}
|
// }
|
||||||
ToolsHelper.log(this.errorInfo)
|
// ToolsHelper.log(JSON.stringify(event),this.url)
|
||||||
})
|
// })
|
||||||
.onHttpErrorReceive((event) => { // 加载失败
|
// .onHttpErrorReceive((event) => { // 加载失败
|
||||||
if (this.progress > 65) {
|
// if (this.progress > 65) {
|
||||||
return
|
// return
|
||||||
}
|
// }
|
||||||
if (event) {
|
// if (event) {
|
||||||
this.errorInfo = `错误码:${event.response.getResponseCode()}\n${event.response.getReasonMessage()}`
|
// this.errorInfo = `错误码:${event.response.getResponseCode()}\n${event.response.getReasonMessage()}`
|
||||||
} else {
|
// } else {
|
||||||
this.errorInfo = '错误码:-1\n未知错误'
|
// this.errorInfo = '错误码:-1\n未知错误'
|
||||||
}
|
// }
|
||||||
ToolsHelper.log(this.errorInfo)
|
// ToolsHelper.log( this.errorInfo,this.url)
|
||||||
})
|
// })
|
||||||
.onProgressChange((event) => { // 加载进度
|
.onProgressChange((event) => { // 加载进度
|
||||||
if (event) {
|
if (event) {
|
||||||
console.log('newProgress:' + event.newProgress)
|
console.log('newProgress:' + event.newProgress)
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
import { router } from '@kit.ArkUI';
|
import { router } from '@kit.ArkUI';
|
||||||
import { BusinessError } from '@kit.BasicServicesKit';
|
import { BusinessError } from '@kit.BasicServicesKit';
|
||||||
import { LogHelper } from '../../../../Index';
|
import { LogHelper } from '../../../../Index';
|
||||||
|
import { baseEncode } from '../util/base64Util';
|
||||||
import { ToolsHelper } from './ToolsHelper';
|
import { ToolsHelper } from './ToolsHelper';
|
||||||
|
|
||||||
const XWebview = import('../pages/XWebview');
|
const XWebview = import('../pages/XWebview');
|
||||||
@ -8,10 +9,12 @@ const XWebview = import('../pages/XWebview');
|
|||||||
|
|
||||||
export interface XWebParams {
|
export interface XWebParams {
|
||||||
url?: string
|
url?: string
|
||||||
|
zoomAccess?: boolean
|
||||||
content?: string
|
content?: string
|
||||||
title?: string
|
title?: string
|
||||||
showMenu?: boolean
|
showMenu?: boolean
|
||||||
closeTag?: string
|
closeTag?: string
|
||||||
|
watermarkTxt?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
export class XWebHelper {
|
export class XWebHelper {
|
||||||
@ -37,4 +40,20 @@ export class XWebHelper {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
public static openPreview(params: XWebParams): Promise<boolean> {
|
||||||
|
params.url = `https://mdtdemo.51trust.com/preview/onlinePreview?url=${baseEncode(params.url)}&watermarkTxt=${encodeURI(params.watermarkTxt??'')}`
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
router.pushNamedRoute({
|
||||||
|
name: 'XWebview',
|
||||||
|
params: params
|
||||||
|
}, router.RouterMode.Single).then(() => {
|
||||||
|
LogHelper.info('Succeeded in jumping to the XWebview page.')
|
||||||
|
resolve(true)
|
||||||
|
}).catch((err: BusinessError) => {
|
||||||
|
resolve(false)
|
||||||
|
LogHelper.error(`Failed to jump to the second page.Code is ${err.code}, message is ${err.message}`)
|
||||||
|
ToolsHelper.showMessage(`Failed to jump to the second page.Code is ${err.code}, message is ${err.message}`)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
正在加载...
在新工单中引用
屏蔽一个用户