鸿蒙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://xiahunao.cn/news/2871260.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【回归预测】基于SSA-BP(麻雀搜索算法优化BP神经网络)的回归预测 多输入单输出【Matlab代码#69】

文章目录 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】1. BP神经网络2. 麻雀搜索算法3. SSA-BP神经网络模型的构建4. 部分代码展示5. 仿真结果展示 【可更换其他算法&#xff0c;获取资源请见文章第6节&#xff1a;资源获取】 1. BP神经网络 BP&…

【开源】SpringBoot框架开发就医保险管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 科室档案模块2.2 医生档案模块2.3 预约挂号模块2.4 我的挂号模块 三、系统展示四、核心代码4.1 用户查询全部医生4.2 新增医生4.3 查询科室4.4 新增号源4.5 预约号源 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVue…

训练YOLOv8m时AMP显示v8n

在训练Yolov8模型时&#xff0c;使用AMP&#xff08;Automatic Mixed Precision&#xff09;可以加速训练过程并减少显存的使用。AMP是一种混合精度训练技术&#xff0c;它通过将模型参数的计算转换为低精度&#xff08;如半精度&#xff09;来提高训练速度&#xff0c;同时保持…

《LeetCode热题100》笔记题解思路技巧优化_Part_3

《LeetCode热题100》笔记&题解&思路&技巧&优化_Part_3 &#x1f60d;&#x1f60d;&#x1f60d; 相知&#x1f64c;&#x1f64c;&#x1f64c; 相识&#x1f622;&#x1f622;&#x1f622; 开始刷题链表&#x1f7e2;1. 相交链表&#x1f7e2;2. 反转链表&…

第四章:数据操作Ⅰ 第十三节:与MySQL联动

我们可以使用MySQL数据库来保存R的数据&#xff0c;或者可以借助数据框的强大功能协助R进行数据处理 一、MySOL安装和测试 MYSQL安装教程&#xff1a;https://blog.csdn.net/m0_52559040/article/details/121843945 注意&#xff1a;在选择账户界面时&#xff0c;我们除了要设置…

JavaScript 中实现请求并发控制

文章目录 浏览器并发请求限制数&#xff08;图&#xff09;实现代码三方插件 假设有 30 个待办任务要执行&#xff0c;而我们希望限制同时执行的任务个数&#xff0c;即最多只有 3 个任务能同时执行。当正在执行任务列表 中的任何 1 个任务完成后&#xff0c;程序会自动从 待办…

虚拟机 VMware下载及安装

centos官网&#xff1a;CentOS Mirror 虚拟机vmware官网&#xff1a;VMware 官网 一直点下一步就好了&#xff0c;有些配置按需修改即可 创建新的虚拟机 处理内核总数不能大于自己主机的逻辑处理器 安装操作系统&#xff1a;引入centos镜像 然后就可以点击开启此虚拟机&#xf…

Mysql的行级锁

MySQL 中锁定粒度最小的一种锁&#xff0c;是 针对索引字段加的锁 &#xff0c;只针对当前操作的行记录进行加锁。 行级锁能大大减少数据库操作的冲突。其加锁粒度最小&#xff0c;并发度高&#xff0c;但加锁的开销也最大&#xff0c;加锁慢&#xff0c;会出现死锁。行级锁和存…

从政府工作报告探究计算机行业发展

从政府工作报告探计算机行业发展 政府工作报告作为政府工作的全面总结和未来规划&#xff0c;不仅反映了国家整体的发展态势&#xff0c;也为各行各业提供了发展的指引和参考。随着信息技术的快速发展&#xff0c;计算机行业已经成为推动经济社会发展的重要引擎之一。因此&…

STM32第九节(中级篇):RCC(第一节)——时钟树讲解

目录 前言 STM32第九节&#xff08;中级篇&#xff09;&#xff1a;RCC——时钟树讲解 时钟树主系统时钟讲解 HSE时钟 HSI时钟 锁相环时钟 系统时钟 SW位控制 HCLK时钟 PCLKI时钟 PCLK2时钟 RTC时钟 MCO时钟输出 6.2.7时钟安全系统(CSS&#xff09; 小结 前言 从…

如何在微服务代码中优雅的处理异常 | 全局异常的实现方式

在微服务架构中&#xff0c;我们经常要处理一些已知的异常&#xff0c;在处理时&#xff0c;为了更好的统一去处理异常&#xff0c;我们要实现全局异常代码块&#xff0c;通过传入特定的状态码和错误信息或者一个枚举值&#xff0c;通过Response返回错误信息&#xff0c;传输到…

day-22 岛屿数量

参考了答案。。。。。。 思路&#xff1a;深度优先遍历&#xff0c;对每个是陆地且未曾访问过的位置进行dfs&#xff0c;每进行一次&#xff0c;岛屿数量加一 code: class Solution {private static final int[][] dir {{-1, 0}, {0, -1}, {1, 0}, {0, 1}};private boolean…

【高通camera hal bug分析】高通自带相机镜像问题

首先打了两个log&#xff0c;一个是开启镜像的log&#xff0c;还有一个是没有开启镜像的log&#xff0c;如果我们开启镜像以后&#xff0c;观察开启镜像log发现 , 这段代码走的没有任何问题&#xff0c;因为Flip的值等于1了。 关闭镜像log如下&#xff1a; 如果我们不开启镜像…

Pycharm安装阿里云通义码灵插件图文教程

前提&#xff1a;必须安装pycharm&#xff0c;可以访问 pycharm下载链接打开页面下载 点击下载后&#xff0c;将下载文件打开&#xff0c;然后无脑安装&#xff0c;安装好后继续看。 然后就安装好了&#xff0c;然后关闭安装&#xff0c;然后打开pycharm即可。 &#x1f680;…

网络学习:IPV6地址详解

目录 前言&#xff1a; 一、IPV6的由来 二、什么是IPV6地址&#xff1f; IPV6地址结构&#xff1a; 前言&#xff1a; IPV6&#xff08;Internet Protocol Version 6&#xff09;是网络层协议的第二代标准协议&#xff0c;也被称为IPng&#xff08;IP Next Generation&…

【开源】SpringBoot框架开发二手车交易系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 二手车档案管理模块2.3 车辆预约管理模块2.4 车辆预定管理模块2.5 车辆留言板管理模块2.6 车辆资讯管理模块 三、系统设计3.1 E-R图设计3.2 可行性分析3.2.1 技术可行性分析3.2.2 操作可行性3.2.3 经济…

鼠标事件中的距离

event.clientX&#xff0c;event.clientY 鼠标点击时到视口的距离。与页面有无滚动条无关。 event.pageX&#xff0c;event.pageY 鼠标点击时到整个文档边缘的距离。 event.pageX event.clientX document.documentElement.scrollLeft。 鼠标事件坐标图解

并发编程之interrupt方法的详细解析

3.9 interrupt方法详解 Interrupt说明 interrupt的本质是将线程的打断标记设为true&#xff0c;并调用线程的三个parker对象&#xff08;C实现级别&#xff09;unpark该线程。 基于以上本质&#xff0c;有如下说明&#xff1a; 打断线程不等于中断线程&#xff0c;有以下两种…

4.1_6 文件的基本操作

文章目录 4.1_6 文件的基本操作&#xff08;一&#xff09;创建文件&#xff08;二&#xff09;删除文件&#xff08;三&#xff09;打开文件&#xff08;四&#xff09;关闭文件&#xff08;五&#xff09;读文件&#xff08;六&#xff09;写文件 总结 4.1_6 文件的基本操作 …

C语言 数据在内存中的存储

目录 前言 一、整数在内存中的存储 二、大小端字节序和字节序判断 2.1.练习一 2.2 练习二 2.3 练习三 2.4 练习四 2.5 练习五 2.6 练习六 三、浮点数在内存中的存储 3.1 浮点数存的过程 3.2 浮点数取的过程 总结 前言 数据在内存中根据数据类型有不同的存储方式&#xff0c;今…