鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Web)中篇

onBeforeUnload

onBeforeUnload(callback: (event?: { url: string; message: string; result: JsResult }) => boolean)

刷新或关闭场景下,在即将离开当前页面时触发此回调。刷新或关闭当前页面应先通过点击等方式获取焦点,才会触发此回调。

参数:

参数名参数类型参数描述
urlstring当前显示弹窗所在网页的URL。
messagestring弹窗中显示的信息。
resultJsResult通知Web组件用户操作行为。

返回值:

类型说明
boolean当回调返回true时,应用可以调用系统弹窗能力(包括确认和取消),并且需要根据用户的确认或取消操作调用JsResult通知Web组件最终是否离开当前页面。当回调返回false时,函数中绘制的自定义弹窗无效。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src: $rawfile("index.html"), controller: this.controller }).onBeforeUnload((event) => {if (event) {console.log("event.url:" + event.url)console.log("event.message:" + event.message)AlertDialog.show({title: 'onBeforeUnload',message: 'text',primaryButton: {value: 'cancel',action: () => {event.result.handleCancel()}},secondaryButton: {value: 'ok',action: () => {event.result.handleConfirm()}},cancel: () => {event.result.handleCancel()}})}return true})}}
}

加载的html文件。

<!--index.html-->
<!DOCTYPE html>
<html>
<head><meta name="viewport" content="width=device-width, initial-scale=1.0" charset="utf-8">
</head>
<body onbeforeunload="return myFunction()"><h1>WebView onBeforeUnload Demo</h1><a href="https://www.example.com">Click here</a><script>function myFunction() {return "onBeforeUnload Event";}</script>
</body>
</html>

onConfirm

onConfirm(callback: (event?: { url: string; message: string; result: JsResult }) => boolean)

网页调用confirm()告警时触发此回调。

参数:

参数名参数类型参数描述
urlstring当前显示弹窗所在网页的URL。
messagestring弹窗中显示的信息。
resultJsResult通知Web组件用户操作行为。

返回值:

类型说明
boolean当回调返回true时,应用可以调用系统弹窗能力(包括确认和取消),并且需要根据用户的确认或取消操作调用JsResult通知Web组件。当回调返回false时,函数中绘制的自定义弹窗无效。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src: $rawfile("index.html"), controller: this.controller }).onConfirm((event) => {if (event) {console.log("event.url:" + event.url)console.log("event.message:" + event.message)AlertDialog.show({title: 'onConfirm',message: 'text',primaryButton: {value: 'cancel',action: () => {event.result.handleCancel()}},secondaryButton: {value: 'ok',action: () => {event.result.handleConfirm()}},cancel: () => {event.result.handleCancel()}})}return true})}}
}

加载的html文件。

<!--index.html-->
<!DOCTYPE html>
<html>
<head><meta name="viewport" content="width=device-width, initial-scale=1.0" charset="utf-8">
</head><body><h1>WebView onConfirm Demo</h1><button onclick="myFunction()">Click here</button><p id="demo"></p><script>function myFunction() {let x;let r = confirm("click button!");if (r == true) {x = "ok";} else {x = "cancel";}document.getElementById("demo").innerHTML = x;}</script>
</body>
</html>

onPrompt9+

onPrompt(callback: (event?: { url: string; message: string; value: string; result: JsResult }) => boolean)

网页调用prompt()告警时触发此回调。

参数:

参数名参数类型参数描述
urlstring当前显示弹窗所在网页的URL。
messagestring弹窗中显示的信息。
resultJsResult通知Web组件用户操作行为。

返回值:

类型说明
boolean当回调返回true时,应用可以调用系统弹窗能力(包括确认和取消),并且需要根据用户的确认或取消操作调用JsResult通知Web组件。当回调返回false时,函数中绘制的自定义弹窗无效。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src: $rawfile("index.html"), controller: this.controller }).onPrompt((event) => {if (event) {console.log("url:" + event.url)console.log("message:" + event.message)console.log("value:" + event.value)AlertDialog.show({title: 'onPrompt',message: 'text',primaryButton: {value: 'cancel',action: () => {event.result.handleCancel()}},secondaryButton: {value: 'ok',action: () => {event.result.handlePromptConfirm(event.value)}},cancel: () => {event.result.handleCancel()}})}return true})}}
}

加载的html文件。

<!--index.html-->
<!DOCTYPE html>
<html>
<head><meta name="viewport" content="width=device-width, initial-scale=1.0" charset="utf-8">
</head><body><h1>WebView onPrompt Demo</h1><button onclick="myFunction()">Click here</button><p id="demo"></p><script>function myFunction() {let message = prompt("Message info", "Hello World");if (message != null && message != "") {document.getElementById("demo").innerHTML = message;}}</script>
</body>
</html>

onConsole

onConsole(callback: (event?: { message: ConsoleMessage }) => boolean)

通知宿主应用JavaScript console消息。

参数:

参数名参数类型参数描述
messageConsoleMessage触发的控制台信息。

返回值:

类型说明
boolean当返回true时,该条消息将不会再打印至控制台,反之仍会打印至控制台。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src: 'www.example.com', controller: this.controller }).onConsole((event) => {if (event) {console.log('getMessage:' + event.message.getMessage())console.log('getSourceId:' + event.message.getSourceId())console.log('getLineNumber:' + event.message.getLineNumber())console.log('getMessageLevel:' + event.message.getMessageLevel())}return false})}}
}

onDownloadStart

onDownloadStart(callback: (event?: { url: string, userAgent: string, contentDisposition: string, mimetype: string, contentLength: number }) => void)

通知主应用开始下载一个文件。

参数:

参数名参数类型参数描述
urlstring文件下载的URL。
userAgentstring用于下载的用户代理。
contentDispositionstring服务器返回的 Content-Disposition响应头,可能为空。
mimetypestring服务器返回内容媒体类型(MIME)信息。
contentLengthnumber服务器返回文件的长度。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src: 'www.example.com', controller: this.controller }).onDownloadStart((event) => {if (event) {console.log('url:' + event.url)console.log('userAgent:' + event.userAgent)console.log('contentDisposition:' + event.contentDisposition)console.log('contentLength:' + event.contentLength)console.log('mimetype:' + event.mimetype)}})}}
}

onErrorReceive

onErrorReceive(callback: (event?: { request: WebResourceRequest, error: WebResourceError }) => void)

网页加载遇到错误时触发该回调。出于性能考虑,建议此回调中尽量执行简单逻辑。在无网络的情况下,触发此回调。

参数:

参数名参数类型参数描述
requestWebResourceRequest网页请求的封装信息。
errorWebResourceError网页加载资源错误的封装信息 。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src: 'www.example.com', controller: this.controller }).onErrorReceive((event) => {if (event) {console.log('getErrorInfo:' + event.error.getErrorInfo())console.log('getErrorCode:' + event.error.getErrorCode())console.log('url:' + event.request.getRequestUrl())console.log('isMainFrame:' + event.request.isMainFrame())console.log('isRedirect:' + event.request.isRedirect())console.log('isRequestGesture:' + event.request.isRequestGesture())console.log('getRequestHeader_headerKey:' + event.request.getRequestHeader().toString())let result = event.request.getRequestHeader()console.log('The request header result size is ' + result.length)for (let i of result) {console.log('The request header key is : ' + i.headerKey + ', value is : ' + i.headerValue)}}})}}
}

onHttpErrorReceive

onHttpErrorReceive(callback: (event?: { request: WebResourceRequest, response: WebResourceResponse }) => void)

网页加载资源遇到的HTTP错误(响应码>=400)时触发该回调。

参数:

参数名参数类型参数描述
requestWebResourceRequest网页请求的封装信息。
responseWebResourceResponse资源响应的封装信息。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src: 'www.example.com', controller: this.controller }).onHttpErrorReceive((event) => {if (event) {console.log('url:' + event.request.getRequestUrl())console.log('isMainFrame:' + event.request.isMainFrame())console.log('isRedirect:' + event.request.isRedirect())console.log('isRequestGesture:' + event.request.isRequestGesture())console.log('getResponseData:' + event.response.getResponseData())console.log('getResponseEncoding:' + event.response.getResponseEncoding())console.log('getResponseMimeType:' + event.response.getResponseMimeType())console.log('getResponseCode:' + event.response.getResponseCode())console.log('getReasonMessage:' + event.response.getReasonMessage())let result = event.request.getRequestHeader()console.log('The request header result size is ' + result.length)for (let i of result) {console.log('The request header key is : ' + i.headerKey + ' , value is : ' + i.headerValue)}let resph = event.response.getResponseHeader()console.log('The response header result size is ' + resph.length)for (let i of resph) {console.log('The response header key is : ' + i.headerKey + ' , value is : ' + i.headerValue)}}})}}
}

onPageBegin

onPageBegin(callback: (event?: { url: string }) => void)

网页开始加载时触发该回调,且只在主frame触发,iframe或者frameset的内容加载时不会触发此回调。

参数:

参数名参数类型参数描述
urlstring页面的URL地址。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src: 'www.example.com', controller: this.controller }).onPageBegin((event) => {if (event) {console.log('url:' + event.url)}})}}
}

onPageEnd

onPageEnd(callback: (event?: { url: string }) => void)

网页加载完成时触发该回调,且只在主frame触发。

参数:

参数名参数类型参数描述
urlstring页面的URL地址。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src: 'www.example.com', controller: this.controller }).onPageEnd((event) => {if (event) {console.log('url:' + event.url)}})}}
}

onProgressChange

onProgressChange(callback: (event?: { newProgress: number }) => void)

网页加载进度变化时触发该回调。

参数:

参数名参数类型参数描述
newProgressnumber新的加载进度,取值范围为0到100的整数。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src: 'www.example.com', controller: this.controller }).onProgressChange((event) => {if (event) {console.log('newProgress:' + event.newProgress)}})}}
}

onTitleReceive

onTitleReceive(callback: (event?: { title: string }) => void)

网页document标题更改时触发该回调。

参数:

参数名参数类型参数描述
titlestringdocument标题内容。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src: 'www.example.com', controller: this.controller }).onTitleReceive((event) => {if (event) {console.log('title:' + event.title)}})}}
}

onRefreshAccessedHistory

onRefreshAccessedHistory(callback: (event?: { url: string, isRefreshed: boolean }) => void)

加载网页页面完成时触发该回调,用于应用更新其访问的历史链接。

参数:

参数名参数类型参数描述
urlstring访问的url。
isRefreshedbooleantrue表示该页面是被重新加载的(调用refresh9+接口),false表示该页面是新加载的。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src: 'www.example.com', controller: this.controller }).onRefreshAccessedHistory((event) => {if (event) {console.log('url:' + event.url + ' isReload:' + event.isRefreshed)}})}}
}

onSslErrorReceive(deprecated)

onSslErrorReceive(callback: (event?: { handler: Function, error: object }) => void)

通知用户加载资源时发生SSL错误。

说明:

从API version 8开始支持,从API version 9开始废弃。建议使用onSslErrorEventReceive9+替代。

onFileSelectorShow(deprecated)

onFileSelectorShow(callback: (event?: { callback: Function, fileSelector: object }) => void)

调用此函数以处理具有“文件”输入类型的HTML表单,以响应用户按下的“选择文件”按钮。

说明:

从API version 8开始支持,从API version 9开始废弃。建议使用onShowFileSelector9+替代。

onRenderExited9+

onRenderExited(callback: (event?: { renderExitReason: RenderExitReason }) => void)

应用渲染进程异常退出时触发该回调。

参数:

参数名参数类型参数描述
renderExitReasonRenderExitReason渲染进程异常退出的具体原因。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src: 'chrome://crash/', controller: this.controller }).onRenderExited((event) => {if (event) {console.log('reason:' + event.renderExitReason)}})}}
}

onShowFileSelector9+

onShowFileSelector(callback: (event?: { result: FileSelectorResult, fileSelector: FileSelectorParam }) => boolean)

调用此函数以处理具有“文件”输入类型的HTML表单,以响应用户按下的“选择文件”按钮。

参数:

参数名参数类型参数描述
resultFileSelectorResult用于通知Web组件文件选择的结果。
fileSelectorFileSelectorParam文件选择器的相关信息。

返回值:

类型说明
boolean当返回值为true时,用户可以调用系统提供的弹窗能力。当回调返回false时,函数中绘制的自定义弹窗无效。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview';
import picker from '@ohos.file.picker';
import { BusinessError } from '@ohos.base';@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src: $rawfile('index.html'), controller: this.controller }).onShowFileSelector((event) => {console.log('MyFileUploader onShowFileSelector invoked')const documentSelectOptions = new picker.DocumentSelectOptions();let uri: string | null = null;const documentViewPicker = new picker.DocumentViewPicker();documentViewPicker.select(documentSelectOptions).then((documentSelectResult) => {uri = documentSelectResult[0];console.info('documentViewPicker.select to file succeed and uri is:' + uri);if (event) {event.result.handleFileList([uri]);}}).catch((err: BusinessError) => {console.error(`Invoke documentViewPicker.select failed, code is ${err.code}, message is ${err.message}`);})return true})}}
}

加载的html文件。

<!DOCTYPE html>
<html>
<head><meta name="viewport" content="width=device-width, initial-scale=1.0" charset="utf-8">
</head>
<body><form id="upload-form" enctype="multipart/form-data"><input type="file" id="upload" name="upload"/></form>
</body>
</html>

onResourceLoad9+

onResourceLoad(callback: (event: {url: string}) => void)

通知Web组件所加载的资源文件url信息。

参数:

参数名参数类型参数描述
urlstring所加载的资源文件url信息。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src: 'www.example.com', controller: this.controller }).onResourceLoad((event) => {console.log('onResourceLoad: ' + event.url)})}}
}

onScaleChange9+

onScaleChange(callback: (event: {oldScale: number, newScale: number}) => void)

当前页面显示比例的变化时触发该回调。

参数:

参数名参数类型参数描述
oldScalenumber变化前的显示比例百分比。
newScalenumber变化后的显示比例百分比。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src: 'www.example.com', controller: this.controller }).onScaleChange((event) => {console.log('onScaleChange changed from ' + event.oldScale + ' to ' + event.newScale)})}}
}

onUrlLoadIntercept(deprecated)

onUrlLoadIntercept(callback: (event?: { data:string | WebResourceRequest }) => boolean)

当Web组件加载url之前触发该回调,用于判断是否阻止此次访问。默认允许加载。 从API version 10开始不再维护,建议使用onLoadIntercept10+代替。

参数:

参数名参数类型参数描述
datastring | WebResourceRequesturl的相关信息。

返回值:

类型说明
boolean返回true表示阻止此次加载,否则允许此次加载。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src: 'www.example.com', controller: this.controller }).onUrlLoadIntercept((event) => {if (event) {console.log('onUrlLoadIntercept ' + event.data.toString())}return true})}}
}

onInterceptRequest9+

onInterceptRequest(callback: (event?: { request: WebResourceRequest}) => WebResourceResponse)

当Web组件加载url之前触发该回调,用于拦截url并返回响应数据。

参数:

参数名参数类型参数描述
requestWebResourceRequesturl请求的相关信息。

返回值:

类型说明
WebResourceResponse返回响应数据则按照响应数据加载,无响应数据则返回null表示按照原来的方式加载。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()responseweb: WebResourceResponse = new WebResourceResponse()heads:Header[] = new Array()@State webdata: string = "<!DOCTYPE html>\n" +"<html>\n"+"<head>\n"+"<title>intercept test</title>\n"+"</head>\n"+"<body>\n"+"<h1>intercept test</h1>\n"+"</body>\n"+"</html>"build() {Column() {Web({ src: 'www.example.com', controller: this.controller }).onInterceptRequest((event) => {if (event) {console.log('url:' + event.request.getRequestUrl())}let head1:Header = {headerKey:"Connection",headerValue:"keep-alive"}let head2:Header = {headerKey:"Cache-Control",headerValue:"no-cache"}let length = this.heads.push(head1)length = this.heads.push(head2)this.responseweb.setResponseHeader(this.heads)this.responseweb.setResponseData(this.webdata)this.responseweb.setResponseEncoding('utf-8')this.responseweb.setResponseMimeType('text/html')this.responseweb.setResponseCode(200)this.responseweb.setReasonMessage('OK')return this.responseweb})}}
}

onHttpAuthRequest9+

onHttpAuthRequest(callback: (event?: { handler: HttpAuthHandler, host: string, realm: string}) => boolean)

通知收到http auth认证请求。

参数:

参数名参数类型参数描述
handlerHttpAuthHandler通知Web组件用户操作行为。
hoststringHTTP身份验证凭据应用的主机。
realmstringHTTP身份验证凭据应用的域。

返回值:

类型说明
boolean返回false表示此次认证失败,否则成功。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'
@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()httpAuth: boolean = falsebuild() {Column() {Web({ src: 'www.example.com', controller: this.controller }).onHttpAuthRequest((event) => {if (event) {AlertDialog.show({title: 'onHttpAuthRequest',message: 'text',primaryButton: {value: 'cancel',action: () => {event.handler.cancel()}},secondaryButton: {value: 'ok',action: () => {this.httpAuth = event.handler.isHttpAuthInfoSaved()if (this.httpAuth == false) {web_webview.WebDataBase.saveHttpAuthCredentials(event.host,event.realm,"2222","2222")event.handler.cancel()}}},cancel: () => {event.handler.cancel()}})}return true})}}
}

onSslErrorEventReceive9+

onSslErrorEventReceive(callback: (event: { handler: SslErrorHandler, error: SslError }) => void)

通知用户加载资源时发生SSL错误。

参数:

参数名参数类型参数描述
handlerSslErrorHandler通知Web组件用户操作行为。
errorSslError错误码。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'
@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()httpAuth: boolean = falsebuild() {Column() {Web({ src: 'www.example.com', controller: this.controller }).onHttpAuthRequest((event) => {if (event) {AlertDialog.show({title: 'onHttpAuthRequest',message: 'text',primaryButton: {value: 'cancel',action: () => {event.handler.cancel()}},secondaryButton: {value: 'ok',action: () => {this.httpAuth = event.handler.isHttpAuthInfoSaved()if (this.httpAuth == false) {web_webview.WebDataBase.saveHttpAuthCredentials(event.host,event.realm,"2222","2222")event.handler.cancel()}}},cancel: () => {event.handler.cancel()}})}return true})}}
}

onClientAuthenticationRequest9+

onClientAuthenticationRequest(callback: (event: {handler : ClientAuthenticationHandler, host : string, port : number, keyTypes : Array<string>, issuers : Array<string>}) => void)

通知用户收到SSL客户端证书请求事件。

参数:

参数名参数类型参数描述
handlerClientAuthenticationHandler通知Web组件用户操作行为。
hoststring请求证书服务器的主机名。
portnumber请求证书服务器的端口号。
keyTypesArray<string>可接受的非对称秘钥类型。
issuersArray<string>与私钥匹配的证书可接受颁发者。

示例:

未对接证书管理的双向认证。

// xxx.ets API9
import web_webview from '@ohos.web.webview'
@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src: 'www.example.com', controller: this.controller }).onClientAuthenticationRequest((event) => {AlertDialog.show({title: 'onClientAuthenticationRequest',message: 'text',primaryButton: {value: 'confirm',action: () => {event.handler.confirm("/system/etc/user.pk8", "/system/etc/chain-user.pem")}},secondaryButton: {value: 'cancel',action: () => {event.handler.cancel()}},cancel: () => {event.handler.ignore()}})})}}
}

对接证书管理的双向认证。

  1. 构造单例对象GlobalContext。

    // GlobalContext.ts
    export class GlobalContext {private constructor() {}private static instance: GlobalContext;private _objects = new Map<string, Object>();public static getContext(): GlobalContext {if (!GlobalContext.instance) {GlobalContext.instance = new GlobalContext();}return GlobalContext.instance;}getObject(value: string): Object | undefined {return this._objects.get(value);}setObject(key: string, objectClass: Object): void {this._objects.set(key, objectClass);}
    }

  2. 实现双向认证。

    // xxx.ets API10
    import common from '@ohos.app.ability.common';
    import Want from '@ohos.app.ability.Want';
    import web_webview from '@ohos.web.webview'
    import { BusinessError } from '@ohos.base';
    import bundleManager from '@ohos.bundle.bundleManager'
    import { GlobalContext } from '../GlobalContext'let uri = "";export default class CertManagerService {private static sInstance: CertManagerService;private authUri = "";private appUid = "";public static getInstance(): CertManagerService {if (CertManagerService.sInstance == null) {CertManagerService.sInstance = new CertManagerService();}return CertManagerService.sInstance;}async grantAppPm(callback: (message: string) => void) {let message = '';let bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_DEFAULT | bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION;//注:com.example.myapplication需要写实际应用名称try {bundleManager.getBundleInfoForSelf(bundleFlags).then((data) => {console.info('getBundleInfoForSelf successfully. Data: %{public}s', JSON.stringify(data));this.appUid = data.appInfo.uid.toString();}).catch((err: BusinessError) => {console.error('getBundleInfoForSelf failed. Cause: %{public}s', err.message);});} catch (err) {let message = (err as BusinessError).message;console.error('getBundleInfoForSelf failed: %{public}s', message);}//注:需要在MainAbility.ts文件的onCreate函数里添加GlobalContext.getContext().setObject("AbilityContext", this.context)let abilityContext = GlobalContext.getContext().getObject("AbilityContext") as common.UIAbilityContextawait abilityContext.startAbilityForResult({bundleName: "com.ohos.certmanager",abilityName: "MainAbility",uri: "requestAuthorize",parameters: {appUid: this.appUid, //传入申请应用的appUid}} as Want).then((data: common.AbilityResult) => {if (!data.resultCode && data.want) {if (data.want.parameters) {this.authUri = data.want.parameters.authUri as string; //授权成功后获取返回的authUri}}})message += "after grantAppPm authUri: " + this.authUri;uri = this.authUri;callback(message)}}@Entry@Componentstruct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController();@State message: string = 'Hello World' //message主要是调试观察使用certManager = CertManagerService.getInstance();build() {Row() {Column() {Row() {//第一步:需要先进行授权,获取到uriButton('GrantApp').onClick(() => {this.certManager.grantAppPm((data) => {this.message = data;});})//第二步:授权后,双向认证会通过onClientAuthenticationRequest回调将uri传给web进行认证Button("ClientCertAuth").onClick(() => {this.controller.loadUrl('https://www.example2.com'); //支持双向认证的服务器网站})}Web({ src: 'https://www.example1.com', controller: this.controller }).fileAccess(true).javaScriptAccess(true).domStorageAccess(true).onlineImageAccess(true).onClientAuthenticationRequest((event) => {AlertDialog.show({title: 'ClientAuth',message: 'Text',confirm: {value: 'Confirm',action: () => {event.handler.confirm(uri);}},cancel: () => {event.handler.cancel();}})})}}.width('100%').height('100%')}}

onPermissionRequest9+

onPermissionRequest(callback: (event?: { request: PermissionRequest }) => void)

通知收到获取权限请求。

参数:

参数名参数类型参数描述
requestPermissionRequest通知Web组件用户操作行为。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src: $rawfile('index.html'), controller: this.controller }).onPermissionRequest((event) => {if (event) {AlertDialog.show({title: 'title',message: 'text',primaryButton: {value: 'deny',action: () => {event.request.deny()}},secondaryButton: {value: 'onConfirm',action: () => {event.request.grant(event.request.getAccessibleResource())}},cancel: () => {event.request.deny()}})}})}}
}

加载的html文件。

 <!-- index.html --><!DOCTYPE html><html><head><meta charset="UTF-8"></head><body><video id="video" width="500px" height="500px" autoplay="autoplay"></video><canvas id="canvas" width="500px" height="500px"></canvas><br><input type="button" title="HTML5摄像头" value="开启摄像头" onclick="getMedia()"/><script>function getMedia(){let constraints = {video: {width: 500, height: 500},audio: true};//获取video摄像头区域let video = document.getElementByld("video");//返回的Promise对象let promise = navigator.mediaDevices.getUserMedia(constraints);//then()异步,调用MediaStream对象作为参数promise.then(function (MediaStream) {video.srcObject = MediaStream;video.play();});}</script></body></html>

onContextMenuShow9+

onContextMenuShow(callback: (event?: { param: WebContextMenuParam, result: WebContextMenuResult }) => boolean)

长按特定元素(例如图片,链接)或鼠标右键,跳出菜单。

参数:

参数名参数类型参数描述
paramWebContextMenuParam菜单相关参数。
resultWebContextMenuResult菜单相应事件传入内核。

返回值:

类型说明
boolean自定义菜单返回true,触发的自定义菜单无效返回false。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'
import pasteboard from '@ohos.pasteboard'
const TAG = 'ContextMenu';@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()private result: WebContextMenuResult | undefined = undefined;@State linkUrl: string = '';@State offsetX: number = 0;@State offsetY: number = 0;@State showMenu: boolean = false;@Builder//构建自定义菜单及触发功能接口MenuBuilder(){//以垂直列表形式显示的菜单。Menu(){//展示菜单Menu中具体的item菜单项。MenuItem({content: '复制图片',}).width(100).height(50).onClick(() => {this.result?.copyImage();this.showMenu = false;})MenuItem({content: '剪切',}).width(100).height(50).onClick(() => {this.result?.cut();this.showMenu = false;})MenuItem({content: '复制',}).width(100).height(50).onClick(() => {this.result?.copy();this.showMenu = false;})MenuItem({content: '粘贴',}).width(100).height(50).onClick(() => {this.result?.paste();this.showMenu = false;})MenuItem({content: '复制链接',}).width(100).height(50).onClick(() => {let pasteData = pasteboard.createData('text/plain', this.linkUrl);pasteboard.getSystemPasteboard().setData(pasteData, (error)=>{if(error){return;}})this.showMenu = false;})MenuItem({content: '全选',}).width(100).height(50).onClick(() => {this.result?.selectAll();this.showMenu = false;})}.width(150).height(300)}build() {Column() {Web({ src: $rawfile("index.html"), controller: this.controller })//触发自定义弹窗.onContextMenuShow((event) => {if (event) {this.result = event.resultconsole.info("x coord = " + event.param.x())console.info("link url = " + event.param.getLinkUrl())this.linkUrl = event.param.getLinkUrl()}console.info(TAG, `x: ${this.offsetX}, y: ${this.offsetY}`);this.showMenu = true;this.offsetX = 250;this.offsetY = Math.max(px2vp(event?.param.y() ?? 0) - 0, 0);return true}).bindPopup(this.showMenu,{builder: this.MenuBuilder(),enableArrow: false,placement: Placement.LeftTop,offset: { x: this.offsetX, y: this.offsetY},mask: false,onStateChange: (e) => {if(!e.isVisible){this.showMenu = false;this.result!.closeContextMenu();}}})}}
}

加载的html文件。

<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<body><h1>onContextMenuShow</h1><a href="http://www.example.com" style="font-size:27px">链接www.example.com</a>//rawfile下放任意一张图片命名为example.png<div><img src="example.png"></div><p>选中文字鼠标右键弹出菜单</p>
</body>
</html>

onContextMenuHide11+

onContextMenuHide(callback: OnContextMenuHideCallback)

长按特定元素(例如图片,链接)或鼠标右键,隐藏菜单。

参数:

参数名参数类型参数描述
callbackOnContextMenuHideCallback菜单相关参数。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src: 'www.example.com', controller: this.controller }).onContextMenuHide(() => {console.log("onContextMenuHide callback")})}}
}

onScroll9+

onScroll(callback: (event: {xOffset: number, yOffset: number}) => void)

通知网页滚动条滚动位置。

参数:

参数名参数类型参数描述
xOffsetnumber以网页最左端为基准,水平滚动条滚动所在位置。
yOffsetnumber以网页最上端为基准,竖直滚动条滚动所在位置。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src: 'www.example.com', controller: this.controller }).onScroll((event) => {console.info("x = " + event.xOffset)console.info("y = " + event.yOffset)})}}
}

onGeolocationShow

onGeolocationShow(callback: (event?: { origin: string, geolocation: JsGeolocation }) => void)

通知用户收到地理位置信息获取请求。

参数:

参数名参数类型参数描述
originstring指定源的字符串索引。
geolocationJsGeolocation通知Web组件用户操作行为。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src:$rawfile('index.html'), controller:this.controller }).geolocationAccess(true).onGeolocationShow((event) => {if (event) {AlertDialog.show({title: 'title',message: 'text',confirm: {value: 'onConfirm',action: () => {event.geolocation.invoke(event.origin, true, true)}},cancel: () => {event.geolocation.invoke(event.origin, false, true)}})}})}}
}

加载的html文件。

<!DOCTYPE html>
<html>
<body>
<p id="locationInfo">位置信息</p>
<button onclick="getLocation()">获取位置</button>
<script>
var locationInfo=document.getElementById("locationInfo");
function getLocation(){if (navigator.geolocation) {<!-- 前端页面访问设备地理位置 -->navigator.geolocation.getCurrentPosition(showPosition);}
}
function showPosition(position){locationInfo.innerHTML="Latitude: " + position.coords.latitude + "<br />Longitude: " + position.coords.longitude;
}
</script>
</body>
</html>

onGeolocationHide

onGeolocationHide(callback: () => void)

通知用户先前被调用onGeolocationShow时收到地理位置信息获取请求已被取消。

参数:

参数名参数类型参数描述
callback() => void地理位置信息获取请求已被取消的回调函数。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src:'www.example.com', controller:this.controller }).geolocationAccess(true).onGeolocationHide(() => {console.log("onGeolocationHide...")})}}
}

onFullScreenEnter9+

onFullScreenEnter(callback: (event: { handler: FullScreenExitHandler }) => void)

通知开发者web组件进入全屏模式。

参数:

参数名参数类型参数描述
handlerFullScreenExitHandler用于退出全屏模式的函数句柄。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()handler: FullScreenExitHandler | null = nullbuild() {Column() {Web({ src:'www.example.com', controller:this.controller }).onFullScreenEnter((event) => {console.log("onFullScreenEnter...")this.handler = event.handler})}}
}

onFullScreenExit9+

onFullScreenExit(callback: () => void)

通知开发者web组件退出全屏模式。

参数:

参数名参数类型参数描述
callback() => void退出全屏模式时的回调函数。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()handler: FullScreenExitHandler | null = nullbuild() {Column() {Web({ src:'www.example.com', controller:this.controller }).onFullScreenExit(() => {console.log("onFullScreenExit...")if (this.handler) {this.handler.exitFullScreen()}}).onFullScreenEnter((event) => {this.handler = event.handler})}}
}

onWindowNew9+

onWindowNew(callback: (event: {isAlert: boolean, isUserTrigger: boolean, targetUrl: string, handler: ControllerHandler}) => void)

使能multiWindowAccess情况下,通知用户新建窗口请求。 若不调用event.handler.setWebController接口,会造成render进程阻塞。 如果不需要打开新窗口,在调用event.handler.setWebController接口时须设置成null。

参数:

参数名参数类型参数描述
isAlertbooleantrue代表请求创建对话框,false代表新标签页。
isUserTriggerbooleantrue代表用户触发,false代表非用户触发。
targetUrlstring目标url。
handlerControllerHandler用于设置新建窗口的WebviewController实例。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'//在同一page页有两个web组件。在WebComponent新开窗口时,会跳转到NewWebViewComp。
@CustomDialog
struct NewWebViewComp {
controller?: CustomDialogController
webviewController1: web_webview.WebviewController = new web_webview.WebviewController()
build() {Column() {Web({ src: "", controller: this.webviewController1 }).javaScriptAccess(true).multiWindowAccess(false).onWindowExit(()=> {console.info("NewWebViewComp onWindowExit")if (this.controller) {this.controller.close()}})}}
}@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()dialogController: CustomDialogController | null = nullbuild() {Column() {Web({ src: 'www.example.com', controller: this.controller }).javaScriptAccess(true)//需要使能multiWindowAccess.multiWindowAccess(true).allowWindowOpenMethod(true).onWindowNew((event) => {if (this.dialogController) {this.dialogController.close()}let popController:web_webview.WebviewController = new web_webview.WebviewController()this.dialogController = new CustomDialogController({builder: NewWebViewComp({webviewController1: popController})})this.dialogController.open()//将新窗口对应WebviewController返回给Web内核。//如果不需要打开新窗口请调用event.handler.setWebController接口设置成null。//若不调用event.handler.setWebController接口,会造成render进程阻塞。event.handler.setWebController(popController)})}}
}

onWindowExit9+

onWindowExit(callback: () => void)

通知用户窗口关闭请求。

参数:

参数名参数类型参数描述
callback() => void窗口请求关闭的回调函数。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src:'www.example.com', controller: this.controller }).onWindowExit(() => {console.log("onWindowExit...")})}}
}

onSearchResultReceive9+

onSearchResultReceive(callback: (event?: {activeMatchOrdinal: number, numberOfMatches: number, isDoneCounting: boolean}) => void): WebAttribute

回调通知调用方网页页内查找的结果。

参数:

参数名参数类型参数描述
activeMatchOrdinalnumber当前匹配的查找项的序号(从0开始)。
numberOfMatchesnumber所有匹配到的关键词的个数。
isDoneCountingboolean当次页内查找操作是否结束。该方法可能会回调多次,直到isDoneCounting为true为止。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src: 'www.example.com', controller: this.controller }).onSearchResultReceive(ret => {if (ret) {console.log("on search result receive:" + "[cur]" + ret.activeMatchOrdinal +"[total]" + ret.numberOfMatches + "[isDone]"+ ret.isDoneCounting)}})}}
}

onDataResubmitted9+

onDataResubmitted(callback: (event: {handler: DataResubmissionHandler}) => void)

设置网页表单可以重新提交时触发的回调函数。

参数:

参数名参数类型参数描述
handlerDataResubmissionHandler表单数据重新提交句柄。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'
import business_error from '@ohos.base';
@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {//在网页中点击提交之后,点击refresh按钮可以重新提交时的触发函数。Button('refresh').onClick(() => {try {this.controller.refresh();} catch (error) {let e: business_error.BusinessError = error as business_error.BusinessError;console.error(`ErrorCode: ${e.code},  Message: ${e.message}`);}})Web({ src:$rawfile('index.html'), controller: this.controller }).onDataResubmitted((event) => {console.log('onDataResubmitted')event.handler.resend();})}}
}

加载的html文件。

 <!-- index.html --><!DOCTYPE html><html><head><meta charset="utf-8"></head><body><form action="http://httpbin.org/post" method="post"><input type="text" name="username"><input type="submit" name="提交"></form></body></html>

onPageVisible9+

onPageVisible(callback: (event: {url: string}) => void)

设置旧页面不再呈现,新页面即将可见时触发的回调函数。

参数:

参数名参数类型参数描述
urlstring旧页面不再呈现,新页面即将可见时新页面的url地址。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'
@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src:'www.example.com', controller: this.controller }).onPageVisible((event) => {console.log('onPageVisible url:' + event.url)})}}
}

onInterceptKeyEvent9+

onInterceptKeyEvent(callback: (event: KeyEvent) => boolean)

设置键盘事件的回调函数,该回调在被Webview使用前触发。

参数:

参数名参数类型参数描述
eventKeyEvent触发的KeyEvent事件。

返回值:

类型说明
boolean回调函数通过返回boolean类型值来决定是否继续将该KeyEvent传入Webview内核。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'
@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src:'www.example.com', controller: this.controller }).onInterceptKeyEvent((event) => {if (event.keyCode == 2017 || event.keyCode == 2018) {console.info(`onInterceptKeyEvent get event.keyCode ${event.keyCode}`)return true;}return false;})}}
}

onTouchIconUrlReceived9+

onTouchIconUrlReceived(callback: (event: {url: string, precomposed: boolean}) => void)

设置接收到apple-touch-icon url地址时的回调函数。

参数:

参数名参数类型参数描述
urlstring接收到的apple-touch-icon url地址。
precomposedboolean对应apple-touch-icon是否为预合成。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'
@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src:'www.baidu.com', controller: this.controller }).onTouchIconUrlReceived((event) => {console.log('onTouchIconUrlReceived:' + JSON.stringify(event))})}}
}

onFaviconReceived9+

onFaviconReceived(callback: (event: { favicon: PixelMap }) => void)

设置应用为当前页面接收到新的favicon时的回调函数。

参数:

参数名参数类型参数描述
faviconPixelMap接收到的favicon图标的PixelMap对象。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'
import image from "@ohos.multimedia.image"
@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()@State icon: image.PixelMap | undefined = undefined;build() {Column() {Web({ src:'www.example.com', controller: this.controller }).onFaviconReceived((event) => {console.log('onFaviconReceived');this.icon = event.favicon;})}}
}

onAudioStateChanged10+

onAudioStateChanged(callback: (event: { playing: boolean }) => void)

设置网页上的音频播放状态发生改变时的回调函数。

参数:

参数名参数类型参数描述
playingboolean当前页面的音频播放状态,true表示正在播放,false表示未播放。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'
@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()@State playing: boolean = falsebuild() {Column() {Web({ src:'www.example.com', controller: this.controller }).onAudioStateChanged(event => {this.playing = event.playingconsole.debug('onAudioStateChanged playing: ' + this.playing)})}}
}

onFirstContentfulPaint10+

onFirstContentfulPaint(callback: (event?: { navigationStartTick: number, firstContentfulPaintMs: number }) => void)

设置网页首次内容绘制回调函数。

参数:

参数名参数类型参数描述
navigationStartTicknumbernavigation开始的时间,单位以微秒表示。
firstContentfulPaintMsnumber从navigation开始第一次绘制内容的时间,单位是以毫秒表示。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'
@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src:'www.example.com', controller: this.controller }).onFirstContentfulPaint(event => {if (event) {console.log("onFirstContentfulPaint:" + "[navigationStartTick]:" +event.navigationStartTick + ", [firstContentfulPaintMs]:" +event.firstContentfulPaintMs)}})}}
}

onLoadIntercept10+

onLoadIntercept(callback: (event: { data: WebResourceRequest }) => boolean)

当Web组件加载url之前触发该回调,用于判断是否阻止此次访问。默认允许加载。

参数:

参数名参数类型参数描述
dataWebResourceRequesturl请求的相关信息。

返回值:

类型说明
boolean返回true表示阻止此次加载,否则允许此次加载。

示例:

// xxx.ets
import web_webview from '@ohos.web.webview'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController()build() {Column() {Web({ src: 'www.example.com', controller: this.controller }).onLoadIntercept((event) => {console.log('url:' + event.data.getRequestUrl())console.log('isMainFrame:' + event.data.isMainFrame())console.log('isRedirect:' + event.data.isRedirect())console.log('isRequestGesture:' + event.data.isRequestGesture())return true})}}
}

最后,有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(Harmony NEXT)资料用来跟着学习是非常有必要的。 

这份鸿蒙(Harmony NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)技术知识点。

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

鸿蒙(Harmony NEXT)最新学习路线

  •  HarmonOS基础技能

  • HarmonOS就业必备技能 
  •  HarmonOS多媒体技术

  • 鸿蒙NaPi组件进阶

  • HarmonOS高级技能

  • 初识HarmonOS内核 
  • 实战就业级设备开发

有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。

获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

《鸿蒙 (OpenHarmony)开发入门教学视频》

《鸿蒙生态应用开发V2.0白皮书》

图片

《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建

图片

 《鸿蒙开发基础》

  • ArkTS语言
  • 安装DevEco Studio
  • 运用你的第一个ArkTS应用
  • ArkUI声明式UI开发
  • .……

图片

 《鸿蒙开发进阶》

  • Stage模型入门
  • 网络管理
  • 数据管理
  • 电话服务
  • 分布式应用开发
  • 通知与窗口管理
  • 多媒体技术
  • 安全技能
  • 任务管理
  • WebGL
  • 国际化开发
  • 应用测试
  • DFX面向未来设计
  • 鸿蒙系统移植和裁剪定制
  • ……

图片

《鸿蒙进阶实战》

  • ArkTS实践
  • UIAbility应用
  • 网络案例
  • ……

图片

 获取以上完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料

总结

总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/751523.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序-微信支付

微信支付介绍 梳理一下流程&#xff1a; 1、用户点击下单&#xff0c;小程序向商户系统&#xff08;我们的服务器&#xff09;发起请求&#xff0c;服务器生成一个唯一订单号给小程序。 2、小程序向服务器发起微信支付请求&#xff0c;服务器调用微信下单接口&#xff0c;微信…

【教学类-34-10】20240313 春天拼图(Midjounery生成线描图,4*4格拼图块)(AI对话大师)

作品展示&#xff1a; 背景需求&#xff1a; 利用华文彩云空心字&#xff08;粗胖字体。凑满9个拼图&#xff09;制作了3*3的拼图块 【教学类-34-09】20240310华文彩云学号拼图&#xff08;3*3格子浅灰底图 深灰拼图块&#xff09;&#xff08;AI对话大师&#xff09;-CSDN博…

Android14之报错:error:add its name to the whitelist(一百九十四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

juc(3)

进程 程序由指令和数据组成,到哪有些指令需要执行,有些要读写,句必须将指令加载到cpu,数据加载到内存,再指令运行过程中还要用到磁盘,网络等设备.进程就是用来加载指令.管理内存,管理io的 当一个程序被运行,从磁盘加载这个程序的代码到内存,这时就开启了一个进程 进程可以视…

Elasticsearch 索引库操作 文档操作

索引库就类似数据库表&#xff0c;mapping映射就类似表的结构。要向es中存储数据&#xff0c;必须先创建“库”和“表”。 mapping映射属性 mapping是对索引库中文档的约束&#xff0c;常见的mapping属性包括&#xff1a; type&#xff1a; 字段数据类型&#xff0c;常见的简…

MySQL语法分类 DQL(2)条件查询

为了更好的学习这里给出基本表数据用于查询操作 create table student (id int, name varchar(20), age int, sex varchar(5),address varchar(100),math int,english int );insert into student (id,name,age,sex,address,math,english) values (1,马云,55,男,杭州,66,78),…

python绘制双列堆积柱形图

python绘制单列堆积柱形图 &#xff1a; python绘制单列堆积柱形图-CSDN博客 一、代码 import numpy as np import matplotlib.pyplot as pltN 10 menMeans np.array([[20, 35], [15, 25], [15, 25], [15, 25], [15, 25], [15, 25], [15, 25], [15, 25], [15, 25], [15, 25]…

HAProxy高性能负载均衡器

一、HAProxy基础知识 &#xff08;一&#xff09;HAProxy概述 HAProxy是一款基于事件驱动、单进程模型设计的四层与七层负载均衡器&#xff0c;它能够在TCP/UDP层面以及HTTP(S)等应用层协议上实现高效的流量分发。HAProxy不仅适用于Web服务器负载均衡&#xff0c;还能应用于数据…

【matlab】如何批量修改图片命名

【matlab】如何批量修改图片命名 (●’◡’●)先赞后看养成习惯😊 假如我的图片如下,分别是1、2、3、4、5的命名 需求一:假如现在我需要在其后面统一加上_behind字符串,并且保留原命名,同时替换掉原先的图片,也就是不copy新的一份,直接在原文件夹中处理,我们可以进行…

基于springboot+vue的大学生兼职系统的设计与实现(源码+论文)

作者主页&#xff1a;Java程序员老张 主要内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;…

Java零基础入门-LinkedHashMap集合

一、本期教学目标 学习LinkedHashMap集合的概念及特点。学习LinkedHashMap存储结构。学习LinkedHashMap集合常用方法及示例代码演示。 二、正文 1、概述 我们学习了map接口之HashMap集合&#xff0c;今天我们要来学习map接口的另一个实现类-LinkedHashMap&#xff0c;不知道…

算法思想总结:滑动窗口算法

创作不易&#xff0c;感谢三连 一.长度最小的数组 . - 力扣&#xff08;LeetCode&#xff09;长度最小的数组 class Solution { public:int minSubArrayLen(int target, vector<int>& nums) {int lenINT_MAX,nnums.size(),sum0;//len必须要给一个很大的数&#xf…

go rabbitmq 操作

go rabbitmq 操作 go 依赖包github.com/streadway/amqp docker快速部署 docker pull rabbitmq:management docker run -d rabbitmq:management # 先跑一个看看监听了哪些端口 docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq #5672 go 程序连接&#x…

Java-并发编程--ThreadLocal、InheritableThreadLocal

1.ThreadLocal 作用 作用&#xff1a;为变量在线程中都创建副本&#xff0c;线程可访问自己内部的副本变量。该类提供了线程局部 (thread-local) 变量&#xff0c;访问这个变量&#xff08;通过其 get 或 set 方法&#xff09;的每个线程都有自己的局部变量&#xff0c;它独立…

CleanMyMac X2024免费绿色版安装包下载

在当今这个数字化时代&#xff0c;我们的生活和工作中离不开电脑&#xff0c;尤其是对于Mac用户而言&#xff0c;更是需要一个轻巧、快捷的解决方案来保持电脑的高效运转。CleanMyMac X正是为此而生&#xff0c;它将帮助您清理Mac中的垃圾文件、优化系统性能&#xff0c;让您的…

Python电梯楼层数字识别

程序示例精选 Python电梯楼层数字识别 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《Python电梯楼层数字识别》编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;易读。 学习与应…

STM32的简单介绍

STM32是一种基于ARM Cortex-M内核的32位微控制器&#xff0c;由意法半导体公司开发和生产。STM32具有丰富的外设和功能&#xff0c;适用于各种应用场合&#xff0c;如工业控制、消费电子、物联网、人机交互等。STM32的优势包括低功耗、高性能、高可靠性、易于开发等。STM32的系…

嵌入式学习39-程序创建数据库及查找

1.sqlite3_open int sqlite3_open( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb /* OUT: SQLite db handle */ ); 功能: 打开 数据库文件(创建一个数据库连接) 参数: filename: …

【Linux】基础 IO(文件描述符)-- 详解

一、前言 1、文件的宏观理解 文件在哪呢&#xff1f; 从广义上理解&#xff0c;键盘、显示器、网卡、声卡、显卡、磁盘等几乎所有的外设都可以称之为文件&#xff0c;因为 “Linux 下&#xff0c;一切皆文件”。 从狭义上的理解&#xff0c;文件在磁盘&#xff08;硬件&#…

【博士每天一篇文献-综述】Brain network communication_ concepts, models and applications

阅读时间&#xff1a;2023-12-1 1 介绍 年份&#xff1a;2023 作者&#xff1a;Caio Seguin&#xff0c;Olaf Sporns印第安纳大学心理与脑科学系 期刊&#xff1a; nature reviews neuroscience 引用量&#xff1a;33 中文翻译参考&#xff1a;https://swarma.org/?p44524 …