web控制能力

2024-01-23 17:30 更新

@ohos.web.webview提供web控制能力,web組件提供具有網(wǎng)頁顯示能力。

說明
  • 本模塊接口從API Version 9開始支持。后續(xù)版本如有新增內容,則采用上角標單獨標記該內容的起始版本。

  • 示例效果請以真機運行為準,當前IDE預覽器不支持。

需要權限

訪問在線網(wǎng)頁時需添加網(wǎng)絡權限:ohos.permission.INTERNET,具體申請方式請參考權限申請聲明

導入模塊

  1. import web_webview from '@ohos.web.webview';

once

once(type: string, callback: Callback<void>): void

訂閱一次指定類型Web事件的回調。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

type

string

Web事件的類型,目前支持:"webInited"(Web初始化完成)。

callback

Callback<void>

所訂閱的回調函數(shù)。

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. web_webview.once("webInited", () => {
  4. console.log("setCookie")
  5. web_webview.WebCookieManager.setCookie("https://www.example.com", "a=b")
  6. })
  7. @Entry
  8. @Component
  9. struct WebComponent {
  10. controller: web_webview.WebviewController = new web_webview.WebviewController();
  11. build() {
  12. Column() {
  13. Web({ src: 'www.example.com', controller: this.controller })
  14. }
  15. }
  16. }

WebMessagePort

通過WebMessagePort可以進行消息的發(fā)送以及接收。

postMessageEvent

postMessageEvent(message: WebMessage): void

發(fā)送消息。完整示例代碼參考postMessage

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

message

WebMessage

要發(fā)送的消息。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼。

錯誤碼ID

錯誤信息

17100010

Can not post message using this port.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. ports: web_webview.WebMessagePort[];
  8. build() {
  9. Column() {
  10. Button('postMessageEvent')
  11. .onClick(() => {
  12. try {
  13. this.ports = this.controller.createWebMessagePorts();
  14. this.controller.postMessage('__init_port__', [this.ports[0]], '*');
  15. this.ports[1].postMessageEvent("post message from ets to html5");
  16. } catch (error) {
  17. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  18. }
  19. })
  20. Web({ src: 'www.example.com', controller: this.controller })
  21. }
  22. }
  23. }

onMessageEvent

onMessageEvent(callback: (result: WebMessage) => void): void

注冊回調函數(shù),接收HTML5側發(fā)送過來的消息。完整示例代碼參考postMessage

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

result

WebMessage

接收到的消息。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼。

錯誤碼ID

錯誤信息

17100006

Can not register message event using this port.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. ports: web_webview.WebMessagePort[];
  8. build() {
  9. Column() {
  10. Button('onMessageEvent')
  11. .onClick(() => {
  12. try {
  13. this.ports = this.controller.createWebMessagePorts();
  14. this.ports[1].onMessageEvent((msg) => {
  15. if (typeof(msg) == "string") {
  16. console.log("received string message from html5, string is:" + msg);
  17. } else if (typeof(msg) == "object") {
  18. if (msg instanceof ArrayBuffer) {
  19. console.log("received arraybuffer from html5, length is:" + msg.byteLength);
  20. } else {
  21. console.log("not support");
  22. }
  23. } else {
  24. console.log("not support");
  25. }
  26. })
  27. } catch (error) {
  28. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  29. }
  30. })
  31. Web({ src: 'www.example.com', controller: this.controller })
  32. }
  33. }
  34. }

close

close(): void

關閉該消息端口。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. msgPort: web_webview.WebMessagePort[] = null;
  8. build() {
  9. Column() {
  10. Button('close')
  11. .onClick(() => {
  12. if (this.msgPort && this.msgPort.length == 2) {
  13. this.msgPort[1].close();
  14. } else {
  15. console.error("msgPort is null, Please initialize first");
  16. }
  17. })
  18. Web({ src: 'www.example.com', controller: this.controller })
  19. }
  20. }
  21. }

WebviewController

通過WebviewController可以控制Web組件各種行為。一個WebviewController對象只能控制一個Web組件,且必須在Web組件和WebviewController綁定后,才能調用WebviewController上的方法(靜態(tài)方法除外)。

initializeWebEngine

static initializeWebEngine(): void

在 Web 組件初始化之前,通過此接口加載 Web 引擎的動態(tài)庫文件,以提高啟動性能。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

示例:

本示例以 MainAbility 為例,描述了在 Ability 創(chuàng)建階段完成 Web 組件動態(tài)庫加載的功能。

  1. // xxx.ts
  2. import UIAbility from '@ohos.app.ability.UIAbility';
  3. import web_webview from '@ohos.web.webview';
  4. export default class EntryAbility extends UIAbility {
  5. onCreate(want, launchParam) {
  6. console.log("EntryAbility onCreate")
  7. web_webview.WebviewController.initializeWebEngine()
  8. globalThis.abilityWant = want
  9. console.log("EntryAbility onCreate done")
  10. }
  11. }

setWebDebuggingAccess

static setWebDebuggingAccess(webDebuggingAccess: boolean): void

設置是否啟用網(wǎng)頁調試功能。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

webDebuggingAccess

boolean

設置是否啟用網(wǎng)頁調試功能。

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. aboutToAppear():void {
  8. try {
  9. web_webview.WebviewController.setWebDebuggingAccess(true);
  10. } catch(error) {
  11. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  12. }
  13. }
  14. build() {
  15. Column() {
  16. Web({ src: 'www.example.com', controller: this.controller })
  17. }
  18. }
  19. }

loadUrl

loadUrl(url: string | Resource, headers?: Array<WebHeader>): void

加載指定的URL。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

url

string | Resource

需要加載的 URL。

headers

Array<WebHeader>

URL的附加HTTP請求頭。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

17100002

Invalid url.

17100003

Invalid resource path or file type.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('loadUrl')
  10. .onClick(() => {
  11. try {
  12. //需要加載的URL是string類型
  13. this.controller.loadUrl('www.example.com');
  14. } catch (error) {
  15. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  16. }
  17. })
  18. Web({ src: 'www.example.com', controller: this.controller })
  19. }
  20. }
  21. }
  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('loadUrl')
  10. .onClick(() => {
  11. try {
  12. //帶參數(shù)headers
  13. this.controller.loadUrl('www.example.com', [{headerKey: "headerKey", headerValue: "headerValue"}]);
  14. } catch (error) {
  15. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  16. }
  17. })
  18. Web({ src: 'www.example.com', controller: this.controller })
  19. }
  20. }
  21. }

加載本地網(wǎng)頁,加載本地資源文件有兩種方式。

  1. $rawfile方式。
    1. // xxx.ets
    2. import web_webview from '@ohos.web.webview'
    3. @Entry
    4. @Component
    5. struct WebComponent {
    6. controller: web_webview.WebviewController = new web_webview.WebviewController();
    7. build() {
    8. Column() {
    9. Button('loadUrl')
    10. .onClick(() => {
    11. try {
    12. //需要加載的URL是Resource類型
    13. this.controller.loadUrl($rawfile('index.html'));
    14. } catch (error) {
    15. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
    16. }
    17. })
    18. Web({ src: 'www.example.com', controller: this.controller })
    19. }
    20. }
    21. }

    加載的html文件。

    1. <!-- index.html -->
    2. <!DOCTYPE html>
    3. <html>
    4. <body>
    5. <p>Hello World</p>
    6. </body>
    7. </html>

    2.加載沙箱路徑下的本地資源文件,可以參考web加載沙箱路徑的示例代碼。

loadData

loadData(data: string, mimeType: string, encoding: string, baseUrl?: string, historyUrl?: string): void

加載指定的數(shù)據(jù)。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

data

string

按照”Base64“或者”URL"編碼后的一段字符串。

mimeType

string

媒體類型(MIME)。

encoding

string

編碼類型,具體為“Base64"或者”URL編碼。

baseUrl

string

指定的一個URL路徑(“http”/“https”/"data"協(xié)議),并由Web組件賦值給window.origin。

historyUrl

string

用作歷史記錄所使用的URL。非空時,歷史記錄以此URL進行管理。當baseUrl為空時,此屬性無效。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

17100002

Invalid url.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('loadData')
  10. .onClick(() => {
  11. try {
  12. this.controller.loadData(
  13. "<html><body bgcolor=\"white\">Source:<pre>source</pre></body></html>",
  14. "text/html",
  15. "UTF-8"
  16. );
  17. } catch (error) {
  18. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  19. }
  20. })
  21. Web({ src: 'www.example.com', controller: this.controller })
  22. }
  23. }
  24. }

加載本地資源

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. updataContent: string = '<body><div><image src=file:///data/storage/el1/bundle/entry/resources/rawfile/xxx.png alt="image -- end" width="500" height="250"></image></div></body>'
  8. build() {
  9. Column() {
  10. Button('loadData')
  11. .onClick(() => {
  12. try {
  13. this.controller.loadData(this.updataContent, "text/html", "UTF-8", " ", " ");
  14. } catch (error) {
  15. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  16. }
  17. })
  18. Web({ src: 'www.example.com', controller: this.controller })
  19. }
  20. }
  21. }

accessForward

accessForward(): boolean

當前頁面是否可前進,即當前頁面是否有前進歷史記錄。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

返回值:

類型

說明

boolean

可以前進返回true,否則返回false。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('accessForward')
  10. .onClick(() => {
  11. try {
  12. let result = this.controller.accessForward();
  13. console.log('result:' + result);
  14. } catch (error) {
  15. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  16. }
  17. })
  18. Web({ src: 'www.example.com', controller: this.controller })
  19. }
  20. }
  21. }

forward

forward(): void

按照歷史棧,前進一個頁面。一般結合accessForward一起使用。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('forward')
  10. .onClick(() => {
  11. try {
  12. this.controller.forward();
  13. } catch (error) {
  14. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  15. }
  16. })
  17. Web({ src: 'www.example.com', controller: this.controller })
  18. }
  19. }
  20. }

accessBackward

accessBackward(): boolean

當前頁面是否可后退,即當前頁面是否有返回歷史記錄。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

返回值:

類型

說明

boolean

可以后退返回true,否則返回false。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web compoent.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('accessBackward')
  10. .onClick(() => {
  11. try {
  12. let result = this.controller.accessBackward();
  13. console.log('result:' + result);
  14. } catch (error) {
  15. console.error(`Errorcode: ${error.code}, Message: ${error.message}`);
  16. }
  17. })
  18. Web({ src: 'www.example.com', controller: this.controller })
  19. }
  20. }
  21. }

backward

backward(): void

按照歷史棧,后退一個頁面。一般結合accessBackward一起使用。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('backward')
  10. .onClick(() => {
  11. try {
  12. this.controller.backward();
  13. } catch (error) {
  14. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  15. }
  16. })
  17. Web({ src: 'www.example.com', controller: this.controller })
  18. }
  19. }
  20. }

onActive

onActive(): void

調用此接口通知Web組件進入前臺激活狀態(tài)。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web compoent.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('onActive')
  10. .onClick(() => {
  11. try {
  12. this.controller.onActive();
  13. } catch (error) {
  14. console.error(`Errorcode: ${error.code}, Message: ${error.message}`);
  15. }
  16. })
  17. Web({ src: 'www.example.com', controller: this.controller })
  18. }
  19. }
  20. }

onInactive

onInactive(): void

調用此接口通知Web組件進入未激活狀態(tài)。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web compoent.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('onInactive')
  10. .onClick(() => {
  11. try {
  12. this.controller.onInactive();
  13. } catch (error) {
  14. console.error(`Errorcode: ${error.code}, Message: ${error.message}`);
  15. }
  16. })
  17. Web({ src: 'www.example.com', controller: this.controller })
  18. }
  19. }
  20. }

refresh

refresh(): void

調用此接口通知Web組件刷新網(wǎng)頁。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web compoent.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('refresh')
  10. .onClick(() => {
  11. try {
  12. this.controller.refresh();
  13. } catch (error) {
  14. console.error(`Errorcode: ${error.code}, Message: ${error.message}`);
  15. }
  16. })
  17. Web({ src: 'www.example.com', controller: this.controller })
  18. }
  19. }
  20. }

accessStep

accessStep(step: number): boolean

當前頁面是否可前進或者后退給定的step步。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

step

number

要跳轉的步數(shù),正數(shù)代表前進,負數(shù)代表后退。

返回值:

類型

說明

boolean

頁面是否前進或后退

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼。

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web compoent.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. @State steps: number = 2;
  8. build() {
  9. Column() {
  10. Button('accessStep')
  11. .onClick(() => {
  12. try {
  13. let result = this.controller.accessStep(this.steps);
  14. console.log('result:' + result);
  15. } catch (error) {
  16. console.error(`Errorcode: ${error.code}, Message: ${error.message}`);
  17. }
  18. })
  19. Web({ src: 'www.example.com', controller: this.controller })
  20. }
  21. }
  22. }

clearHistory

clearHistory(): void

刪除所有前進后退記錄。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼。

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web compoent.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('clearHistory')
  10. .onClick(() => {
  11. try {
  12. this.controller.clearHistory();
  13. } catch (error) {
  14. console.error(`Errorcode: ${error.code}, Message: ${error.message}`);
  15. }
  16. })
  17. Web({ src: 'www.example.com', controller: this.controller })
  18. }
  19. }
  20. }

getHitTest

getHitTest(): WebHitTestType

獲取當前被點擊區(qū)域的元素類型。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

返回值:

類型

說明

WebHitTestType

被點擊區(qū)域的元素類型。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web compoent.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('getHitTest')
  10. .onClick(() => {
  11. try {
  12. let hitTestType = this.controller.getHitTest();
  13. console.log("hitTestType: " + hitTestType);
  14. } catch (error) {
  15. console.error(`Errorcode: ${error.code}, Message: ${error.message}`);
  16. }
  17. })
  18. Web({ src: 'www.example.com', controller: this.controller })
  19. }
  20. }
  21. }

registerJavaScriptProxy

registerJavaScriptProxy(object: object, name: string, methodList: Array<string>): void

注入JavaScript對象到window對象中,并在window對象中調用該對象的方法。注冊后,須調用refresh接口生效。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

object

object

參與注冊的應用側JavaScript對象。只能聲明方法,不能聲明屬性 。其中方法的參數(shù)和返回類型只能為string,number,boolean

name

string

注冊對象的名稱,與window中調用的對象名一致。注冊后window對象可以通過此名字訪問應用側JavaScript對象。

methodList

Array<string>

參與注冊的應用側JavaScript對象的方法。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼。

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web compoent.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct Index {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. testObj = {
  8. test: (data) => {
  9. return "ArkUI Web Component";
  10. },
  11. toString: () => {
  12. console.log('Web Component toString');
  13. }
  14. }
  15. build() {
  16. Column() {
  17. Button('refresh')
  18. .onClick(() => {
  19. try {
  20. this.controller.refresh();
  21. } catch (error) {
  22. console.error(`Errorcode: ${error.code}, Message: ${error.message}`);
  23. }
  24. })
  25. Button('Register JavaScript To Window')
  26. .onClick(() => {
  27. try {
  28. this.controller.registerJavaScriptProxy(this.testObj, "objName", ["test", "toString"]);
  29. } catch (error) {
  30. console.error(`Errorcode: ${error.code}, Message: ${error.message}`);
  31. }
  32. })
  33. Web({ src: $rawfile('index.html'), controller: this.controller })
  34. .javaScriptAccess(true)
  35. }
  36. }
  37. }

加載的html文件。

  1. <!-- index.html -->
  2. <!DOCTYPE html>
  3. <html>
  4. <meta charset="utf-8">
  5. <body>
  6. <button type="button" onclick="htmlTest()">Click Me!</button>
  7. <p id="demo"></p>
  8. </body>
  9. <script type="text/javascript">
  10. function htmlTest() {
  11. let str=objName.test();
  12. document.getElementById("demo").innerHTML=str;
  13. console.log('objName.test result:'+ str)
  14. }
  15. </script>
  16. </html>

runJavaScript

runJavaScript(script: string, callback : AsyncCallback<string>): void

異步執(zhí)行JavaScript腳本,并通過回調方式返回腳本執(zhí)行的結果。runJavaScript需要在loadUrl完成后,比如onPageEnd中調用。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

script

string

JavaScript腳本。

callback

AsyncCallback<string>

回調執(zhí)行JavaScript腳本結果。JavaScript腳本若執(zhí)行失敗或無返回值時,返回null。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼。

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web compoent.

示例:

  1. import web_webview from '@ohos.web.webview'
  2. @Entry
  3. @Component
  4. struct WebComponent {
  5. controller: web_webview.WebviewController = new web_webview.WebviewController();
  6. @State webResult: string = ''
  7. build() {
  8. Column() {
  9. Text(this.webResult).fontSize(20)
  10. Web({ src: $rawfile('index.html'), controller: this.controller })
  11. .javaScriptAccess(true)
  12. .onPageEnd(e => {
  13. try {
  14. this.controller.runJavaScript(
  15. 'test()',
  16. (error, result) => {
  17. if (error) {
  18. console.info(`run JavaScript error: ` + JSON.stringify(error))
  19. return;
  20. }
  21. if (result) {
  22. this.webResult = result
  23. console.info(`The test() return value is: ${result}`)
  24. }
  25. });
  26. console.info('url: ', e.url);
  27. } catch (error) {
  28. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  29. }
  30. })
  31. }
  32. }
  33. }

加載的html文件。

  1. <!-- index.html -->
  2. <!DOCTYPE html>
  3. <html>
  4. <meta charset="utf-8">
  5. <body>
  6. Hello world!
  7. </body>
  8. <script type="text/javascript">
  9. function test() {
  10. console.log('Ark WebComponent')
  11. return "This value is from index.html"
  12. }
  13. </script>
  14. </html>

runJavaScript

runJavaScript(script: string): Promise<string>

異步執(zhí)行JavaScript腳本,并通過Promise方式返回腳本執(zhí)行的結果。runJavaScript需要在loadUrl完成后,比如onPageEnd中調用。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

script

string

JavaScript腳本。

返回值:

類型

說明

Promise<string>

Promise實例,返回腳本執(zhí)行的結果,執(zhí)行失敗返回null。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼。

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web compoent.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Web({ src: $rawfile('index.html'), controller: this.controller })
  10. .javaScriptAccess(true)
  11. .onPageEnd(e => {
  12. try {
  13. this.controller.runJavaScript('test()')
  14. .then(function (result) {
  15. console.log('result: ' + result);
  16. })
  17. .catch(function (error) {
  18. console.error("error: " + error);
  19. })
  20. console.info('url: ', e.url);
  21. } catch (error) {
  22. console.error(`Errorcode: ${error.code}, Message: ${error.message}`);
  23. }
  24. })
  25. }
  26. }
  27. }

加載的html文件。

  1. <!-- index.html -->
  2. <!DOCTYPE html>
  3. <html>
  4. <meta charset="utf-8">
  5. <body>
  6. Hello world!
  7. </body>
  8. <script type="text/javascript">
  9. function test() {
  10. console.log('Ark WebComponent')
  11. return "This value is from index.html"
  12. }
  13. </script>
  14. </html>

deleteJavaScriptRegister

deleteJavaScriptRegister(name: string): void

刪除通過registerJavaScriptProxy注冊到window上的指定name的應用側JavaScript對象。刪除后立即生效,無須調用refresh接口。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

name

string

注冊對象的名稱,可在網(wǎng)頁側JavaScript中通過此名稱調用應用側JavaScript對象。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web compoent.

17100008

Cannot delete JavaScriptProxy.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. @State name: string = 'Object';
  8. build() {
  9. Column() {
  10. Button('deleteJavaScriptRegister')
  11. .onClick(() => {
  12. try {
  13. this.controller.deleteJavaScriptRegister(this.name);
  14. } catch (error) {
  15. console.error(`Errorcode: ${error.code}, Message: ${error.message}`);
  16. }
  17. })
  18. Web({ src: 'www.example.com', controller: this.controller })
  19. }
  20. }
  21. }

zoom

zoom(factor: number): void

調整當前網(wǎng)頁的縮放比例,zoomAccess需為true。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

factor

number

基于當前網(wǎng)頁所需調整的相對縮放比例,正值為放大,負值為縮小。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web compoent.

17100004

Function not enable.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. @State factor: number = 1;
  8. build() {
  9. Column() {
  10. Button('zoom')
  11. .onClick(() => {
  12. try {
  13. this.controller.zoom(this.factor);
  14. } catch (error) {
  15. console.error(`Errorcode: ${error.code}, Message: ${error.message}`);
  16. }
  17. })
  18. Web({ src: 'www.example.com', controller: this.controller })
  19. .zoomAccess(true)
  20. }
  21. }
  22. }

searchAllAsync

searchAllAsync(searchString: string): void

異步查找網(wǎng)頁中所有匹配關鍵字'searchString'的內容并高亮,結果通過onSearchResultReceive異步返回。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

searchString

string

查找的關鍵字。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web compoent.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. @State searchString: string = "xxx";
  8. build() {
  9. Column() {
  10. Button('searchString')
  11. .onClick(() => {
  12. try {
  13. this.controller.searchAllAsync(this.searchString);
  14. } catch (error) {
  15. console.error(`Errorcode: ${error.code}, Message: ${error.message}`);
  16. }
  17. })
  18. Web({ src: 'www.example.com', controller: this.controller })
  19. .onSearchResultReceive(ret => {
  20. console.log("on search result receive:" + "[cur]" + ret.activeMatchOrdinal +
  21. "[total]" + ret.numberOfMatches + "[isDone]" + ret.isDoneCounting);
  22. })
  23. }
  24. }
  25. }

clearMatches

clearMatches(): void

清除所有通過searchAllAsync匹配到的高亮字符查找結果。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web compoent.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('clearMatches')
  10. .onClick(() => {
  11. try {
  12. this.controller.clearMatches();
  13. } catch (error) {
  14. console.error(`Errorcode: ${error.code}, Message: ${error.message}`);
  15. }
  16. })
  17. Web({ src: 'www.example.com', controller: this.controller })
  18. }
  19. }
  20. }

searchNext

searchNext(forward: boolean): void

滾動到下一個匹配的查找結果并高亮。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

forward

boolean

從前向后或者逆向查找。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web compoent.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('searchNext')
  10. .onClick(() => {
  11. try {
  12. this.controller.searchNext(true);
  13. } catch (error) {
  14. console.error(`Errorcode: ${error.code}, Message: ${error.message}`);
  15. }
  16. })
  17. Web({ src: 'www.example.com', controller: this.controller })
  18. }
  19. }
  20. }

clearSslCache

clearSslCache(): void

清除Web組件記錄的SSL證書錯誤事件對應的用戶操作行為。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web compoent.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('clearSslCache')
  10. .onClick(() => {
  11. try {
  12. this.controller.clearSslCache();
  13. } catch (error) {
  14. console.error(`Errorcode: ${error.code}, Message: ${error.message}`);
  15. }
  16. })
  17. Web({ src: 'www.example.com', controller: this.controller })
  18. }
  19. }
  20. }

clearClientAuthenticationCache

clearClientAuthenticationCache(): void

清除Web組件記錄的客戶端證書請求事件對應的用戶操作行為。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web compoent.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('clearClientAuthenticationCache')
  10. .onClick(() => {
  11. try {
  12. this.controller.clearClientAuthenticationCache();
  13. } catch (error) {
  14. console.error(`Errorcode: ${error.code}, Message: ${error.message}`);
  15. }
  16. })
  17. Web({ src: 'www.example.com', controller: this.controller })
  18. }
  19. }
  20. }

createWebMessagePorts

createWebMessagePorts(): Array<WebMessagePort>

創(chuàng)建Web消息端口。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

返回值:

類型

說明

Array<WebMessagePort>

web消息端口列表。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼。

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. ports: web_webview.WebMessagePort[];
  8. build() {
  9. Column() {
  10. Button('createWebMessagePorts')
  11. .onClick(() => {
  12. try {
  13. this.ports = this.controller.createWebMessagePorts();
  14. console.log("createWebMessagePorts size:" + this.ports.length)
  15. } catch (error) {
  16. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  17. }
  18. })
  19. Web({ src: 'www.example.com', controller: this.controller })
  20. }
  21. }
  22. }

postMessage

postMessage(name: string, ports: Array<WebMessagePort>, uri: string): void

發(fā)送Web消息端口到HTML。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

name

string

要發(fā)送的消息名稱。

ports

Array<WebMessagePort>

要發(fā)送的消息端口。

uri

string

接收該消息的URI。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. ports: web_webview.WebMessagePort[];
  8. @State sendFromEts: string = 'Send this message from ets to HTML';
  9. @State receivedFromHtml: string = 'Display received message send from HTML';
  10. build() {
  11. Column() {
  12. // 展示接收到的來自HTML的內容
  13. Text(this.receivedFromHtml)
  14. // 輸入框的內容發(fā)送到html
  15. TextInput({placeholder: 'Send this message from ets to HTML'})
  16. .onChange((value: string) => {
  17. this.sendFromEts = value;
  18. })
  19. Button('postMessage')
  20. .onClick(() => {
  21. try {
  22. // 1、創(chuàng)建兩個消息端口。
  23. this.ports = this.controller.createWebMessagePorts();
  24. // 2、在應用側的消息端口(如端口1)上注冊回調事件。
  25. this.ports[1].onMessageEvent((result: web_webview.WebMessage) => {
  26. let msg = 'Got msg from HTML:';
  27. if (typeof(result) == "string") {
  28. console.log("received string message from html5, string is:" + result);
  29. msg = msg + result;
  30. } else if (typeof(result) == "object") {
  31. if (result instanceof ArrayBuffer) {
  32. console.log("received arraybuffer from html5, length is:" + result.byteLength);
  33. msg = msg + "lenght is " + result.byteLength;
  34. } else {
  35. console.log("not support");
  36. }
  37. } else {
  38. console.log("not support");
  39. }
  40. this.receivedFromHtml = msg;
  41. })
  42. // 3、將另一個消息端口(如端口0)發(fā)送到HTML側,由HTML側保存并使用。
  43. this.controller.postMessage('__init_port__', [this.ports[0]], '*');
  44. } catch (error) {
  45. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  46. }
  47. })
  48. // 4、使用應用側的端口給另一個已經(jīng)發(fā)送到html的端口發(fā)送消息。
  49. Button('SendDataToHTML')
  50. .onClick(() => {
  51. try {
  52. if (this.ports && this.ports[1]) {
  53. this.ports[1].postMessageEvent(this.sendFromEts);
  54. } else {
  55. console.error(`ports is null, Please initialize first`);
  56. }
  57. } catch (error) {
  58. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  59. }
  60. })
  61. Web({ src: $rawfile('index.html'), controller: this.controller })
  62. }
  63. }
  64. }
  1. <!--index.html-->
  2. <!DOCTYPE html>
  3. <html>
  4. <head>
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>WebView Message Port Demo</title>
  7. </head>
  8. <body>
  9. <h1>WebView Message Port Demo</h1>
  10. <div>
  11. <input type="button" value="SendToEts" onclick="PostMsgToEts(msgFromJS.value);"/><br/>
  12. <input id="msgFromJS" type="text" value="send this message from HTML to ets"/><br/>
  13. </div>
  14. <p class="output">display received message send from ets</p>
  15. </body>
  16. <script src="xxx.js"></script>
  17. </html>
  1. //xxx.js
  2. var h5Port;
  3. var output = document.querySelector('.output');
  4. window.addEventListener('message', function (event) {
  5. if (event.data == '__init_port__') {
  6. if (event.ports[0] != null) {
  7. h5Port = event.ports[0]; // 1. 保存從ets側發(fā)送過來的端口
  8. h5Port.onmessage = function (event) {
  9. // 2. 接收ets側發(fā)送過來的消息.
  10. var msg = 'Got message from ets:';
  11. var result = event.data;
  12. if (typeof(result) == "string") {
  13. console.log("received string message from html5, string is:" + result);
  14. msg = msg + result;
  15. } else if (typeof(result) == "object") {
  16. if (result instanceof ArrayBuffer) {
  17. console.log("received arraybuffer from html5, length is:" + result.byteLength);
  18. msg = msg + "lenght is " + result.byteLength;
  19. } else {
  20. console.log("not support");
  21. }
  22. } else {
  23. console.log("not support");
  24. }
  25. output.innerHTML = msg;
  26. }
  27. }
  28. }
  29. })
  30. // 3. 使用h5Port往ets側發(fā)送消息.
  31. function PostMsgToEts(data) {
  32. if (h5Port) {
  33. h5Port.postMessage(data);
  34. } else {
  35. console.error("h5Port is null, Please initialize first");
  36. }
  37. }

requestFocus

requestFocus(): void

使當前web頁面獲取焦點。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼。

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('requestFocus')
  10. .onClick(() => {
  11. try {
  12. this.controller.requestFocus();
  13. } catch (error) {
  14. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  15. }
  16. });
  17. Web({ src: 'www.example.com', controller: this.controller })
  18. }
  19. }
  20. }

zoomIn

zoomIn(): void

調用此接口將當前網(wǎng)頁進行放大,比例為20%。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

17100004

Function not enable.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('zoomIn')
  10. .onClick(() => {
  11. try {
  12. this.controller.zoomIn();
  13. } catch (error) {
  14. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  15. }
  16. })
  17. Web({ src: 'www.example.com', controller: this.controller })
  18. }
  19. }
  20. }

zoomOut

zoomOut(): void

調用此接口將當前網(wǎng)頁進行縮小,比例為20%。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼。

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

17100004

Function not enable.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('zoomOut')
  10. .onClick(() => {
  11. try {
  12. this.controller.zoomOut();
  13. } catch (error) {
  14. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  15. }
  16. })
  17. Web({ src: 'www.example.com', controller: this.controller })
  18. }
  19. }
  20. }

getHitTestValue

getHitTestValue(): HitTestValue

獲取當前被點擊區(qū)域的元素信息。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

返回值:

類型

說明

HitTestValue

點擊區(qū)域的元素信息。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('getHitTestValue')
  10. .onClick(() => {
  11. try {
  12. let hitValue = this.controller.getHitTestValue();
  13. console.log("hitType: " + hitValue.type);
  14. console.log("extra: " + hitValue.extra);
  15. } catch (error) {
  16. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  17. }
  18. })
  19. Web({ src: 'www.example.com', controller: this.controller })
  20. }
  21. }
  22. }

getWebId

getWebId(): number

獲取當前Web組件的索引值,用于多個Web組件的管理。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

返回值:

類型

說明

number

當前Web組件的索引值。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('getWebId')
  10. .onClick(() => {
  11. try {
  12. let id = this.controller.getWebId();
  13. console.log("id: " + id);
  14. } catch (error) {
  15. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  16. }
  17. })
  18. Web({ src: 'www.example.com', controller: this.controller })
  19. }
  20. }
  21. }

getUserAgent

getUserAgent(): string

獲取當前默認用戶代理。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

返回值:

類型

說明

string

默認用戶代理。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼。

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('getUserAgent')
  10. .onClick(() => {
  11. try {
  12. let userAgent = this.controller.getUserAgent();
  13. console.log("userAgent: " + userAgent);
  14. } catch (error) {
  15. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  16. }
  17. })
  18. Web({ src: 'www.example.com', controller: this.controller })
  19. }
  20. }
  21. }

getTitle

getTitle(): string

獲取當前網(wǎng)頁的標題。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

返回值:

類型

說明

string

當前網(wǎng)頁的標題。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼。

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('getTitle')
  10. .onClick(() => {
  11. try {
  12. let title = this.controller.getTitle();
  13. console.log("title: " + title);
  14. } catch (error) {
  15. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  16. }
  17. })
  18. Web({ src: 'www.example.com', controller: this.controller })
  19. }
  20. }
  21. }

getPageHeight

getPageHeight(): number

獲取當前網(wǎng)頁的頁面高度。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

返回值:

類型

說明

number

當前網(wǎng)頁的頁面高度。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('getPageHeight')
  10. .onClick(() => {
  11. try {
  12. let pageHeight = this.controller.getPageHeight();
  13. console.log("pageHeight : " + pageHeight);
  14. } catch (error) {
  15. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  16. }
  17. })
  18. Web({ src: 'www.example.com', controller: this.controller })
  19. }
  20. }
  21. }

storeWebArchive

storeWebArchive(baseName: string, autoName: boolean, callback: AsyncCallback<string>): void

以回調方式異步保存當前頁面。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

baseName

string

生成的離線網(wǎng)頁存儲位置,該值不能為空。

autoName

boolean

決定是否自動生成文件名。如果為false,則按baseName的文件名存儲;如果為true,則根據(jù)當前Url自動生成文件名,并按baseName的文件目錄存儲。

callback

AsyncCallback<string>

返回文件存儲路徑,保存網(wǎng)頁失敗會返回null。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

17100003

Invalid resource path or file type.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('storeWebArchive')
  10. .onClick(() => {
  11. try {
  12. this.controller.storeWebArchive("/data/storage/el2/base/", true, (error, filename) => {
  13. if (error) {
  14. console.info(`save web archive error: ` + JSON.stringify(error))
  15. return;
  16. }
  17. if (filename != null) {
  18. console.info(`save web archive success: ${filename}`)
  19. }
  20. });
  21. } catch (error) {
  22. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  23. }
  24. })
  25. Web({ src: 'www.example.com', controller: this.controller })
  26. }
  27. }
  28. }

storeWebArchive

storeWebArchive(baseName: string, autoName: boolean): Promise<string>

以Promise方式異步保存當前頁面。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

baseName

string

生成的離線網(wǎng)頁存儲位置,該值不能為空。

autoName

boolean

決定是否自動生成文件名。如果為false,則按baseName的文件名存儲;如果為true,則根據(jù)當前Url自動生成文件名,并按baseName的文件目錄存儲。

返回值:

類型

說明

Promise<string>

Promise實例,保存成功返回文件路徑,保存失敗返回null。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

17100003

Invalid resource path or file type.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('storeWebArchive')
  10. .onClick(() => {
  11. try {
  12. this.controller.storeWebArchive("/data/storage/el2/base/", true)
  13. .then(filename => {
  14. if (filename != null) {
  15. console.info(`save web archive success: ${filename}`)
  16. }
  17. })
  18. .catch(error => {
  19. console.log('error: ' + JSON.stringify(error));
  20. })
  21. } catch (error) {
  22. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  23. }
  24. })
  25. Web({ src: 'www.example.com', controller: this.controller })
  26. }
  27. }
  28. }

getUrl

getUrl(): string

獲取當前頁面的url地址。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

返回值:

類型

說明

string

當前頁面的url地址。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼。

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('getUrl')
  10. .onClick(() => {
  11. try {
  12. let url = this.controller.getUrl();
  13. console.log("url: " + url);
  14. } catch (error) {
  15. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  16. }
  17. })
  18. Web({ src: 'www.example.com', controller: this.controller })
  19. }
  20. }
  21. }

stop

stop(): void

停止頁面加載。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼。

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('stop')
  10. .onClick(() => {
  11. try {
  12. this.controller.stop();
  13. } catch (error) {
  14. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  15. }
  16. });
  17. Web({ src: 'www.example.com', controller: this.controller })
  18. }
  19. }
  20. }

backOrForward

backOrForward(step: number): void

按照歷史棧,前進或者后退指定步長的頁面,當歷史棧中不存在對應步長的頁面時,不會進行頁面跳轉。

前進或者后退頁面時,直接使用已加載過的網(wǎng)頁,無需重新加載網(wǎng)頁。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

step

number

需要前進或后退的步長。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. @State step: number = -2;
  8. build() {
  9. Column() {
  10. Button('backOrForward')
  11. .onClick(() => {
  12. try {
  13. this.controller.backOrForward(this.step);
  14. } catch (error) {
  15. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  16. }
  17. })
  18. Web({ src: 'www.example.com', controller: this.controller })
  19. }
  20. }
  21. }

scrollTo

scrollTo(x:number, y:number): void

將頁面滾動到指定的絕對位置。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

x

number

絕對位置的水平坐標,當傳入數(shù)值為負數(shù)時,按照傳入0處理。

y

number

絕對位置的垂直坐標,當傳入數(shù)值為負數(shù)時,按照傳入0處理。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼。

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('scrollTo')
  10. .onClick(() => {
  11. try {
  12. this.controller.scrollTo(50, 50);
  13. } catch (error) {
  14. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  15. }
  16. })
  17. Web({ src: 'www.example.com', controller: this.controller })
  18. }
  19. }
  20. }
  1. <!--xxx.html-->
  2. <!DOCTYPE html>
  3. <html>
  4. <head>
  5. <title>Demo</title>
  6. <style>
  7. body {
  8. width:3000px;
  9. height:3000px;
  10. padding-right:170px;
  11. padding-left:170px;
  12. border:5px solid blueviolet
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. Scroll Test
  18. </body>
  19. </html>

scrollBy

scrollBy(deltaX:number, deltaY:number): void

將頁面滾動指定的偏移量。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

deltaX

number

水平偏移量,其中水平向右為正方向。

deltaY

number

垂直偏移量,其中垂直向下為正方向。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('scrollBy')
  10. .onClick(() => {
  11. try {
  12. this.controller.scrollBy(50, 50);
  13. } catch (error) {
  14. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  15. }
  16. })
  17. Web({ src: 'www.example.com', controller: this.controller })
  18. }
  19. }
  20. }
  1. <!--xxx.html-->
  2. <!DOCTYPE html>
  3. <html>
  4. <head>
  5. <title>Demo</title>
  6. <style>
  7. body {
  8. width:3000px;
  9. height:3000px;
  10. padding-right:170px;
  11. padding-left:170px;
  12. border:5px solid blueviolet
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. Scroll Test
  18. </body>
  19. </html>

slideScroll

slideScroll(vx:number, vy:number): void

按照指定速度模擬對頁面的輕掃滾動動作。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

vx

number

輕掃滾動的水平速度分量,其中水平向右為速度正方向。

vy

number

輕掃滾動的垂直速度分量,其中垂直向下為速度正方向。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('slideScroll')
  10. .onClick(() => {
  11. try {
  12. this.controller.slideScroll(500, 500);
  13. } catch (error) {
  14. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  15. }
  16. })
  17. Web({ src: 'www.example.com', controller: this.controller })
  18. }
  19. }
  20. }
  1. <!--xxx.html-->
  2. <!DOCTYPE html>
  3. <html>
  4. <head>
  5. <title>Demo</title>
  6. <style>
  7. body {
  8. width:3000px;
  9. height:3000px;
  10. padding-right:170px;
  11. padding-left:170px;
  12. border:5px solid blueviolet
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. Scroll Test
  18. </body>
  19. </html>

getOriginalUrl

getOriginalUrl(): string

獲取當前頁面的原始url地址。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

返回值:

類型

說明

string

當前頁面的原始url地址。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼。

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('getOrgUrl')
  10. .onClick(() => {
  11. try {
  12. let url = this.controller.getOriginalUrl();
  13. console.log("original url: " + url);
  14. } catch (error) {
  15. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  16. }
  17. })
  18. Web({ src: 'www.example.com', controller: this.controller })
  19. }
  20. }
  21. }

getFavicon

getFavicon(): image.PixelMap

獲取頁面的favicon圖標。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

返回值:

類型

說明

PixelMap

頁面favicon圖標的PixelMap對象。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. import image from "@ohos.multimedia.image"
  4. @Entry
  5. @Component
  6. struct WebComponent {
  7. controller: web_webview.WebviewController = new web_webview.WebviewController();
  8. @State pixelmap: image.PixelMap = undefined;
  9. build() {
  10. Column() {
  11. Button('getFavicon')
  12. .onClick(() => {
  13. try {
  14. this.pixelmap = this.controller.getFavicon();
  15. } catch (error) {
  16. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  17. }
  18. })
  19. Web({ src: 'www.example.com', controller: this.controller })
  20. }
  21. }
  22. }

setNetworkAvailable

setNetworkAvailable(enable: boolean): void

設置JavaScript中的window.navigator.onLine屬性。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

enable

boolean

是否使能window.navigator.onLine。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼。

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('setNetworkAvailable')
  10. .onClick(() => {
  11. try {
  12. this.controller.setNetworkAvailable(true);
  13. } catch (error) {
  14. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  15. }
  16. })
  17. Web({ src: $rawfile('index.html'), controller: this.controller })
  18. }
  19. }
  20. }

加載的html文件。

  1. <!-- index.html -->
  2. <!DOCTYPE html>
  3. <html>
  4. <body>
  5. <h1>online 屬性</h1>
  6. <p id="demo"></p>
  7. <button onclick="func()">click</button>
  8. <script>
  9. let online = navigator.onLine;
  10. document.getElementById("demo").innerHTML = "瀏覽器在線:" + online;
  11. function func(){
  12. var online = navigator.onLine;
  13. document.getElementById("demo").innerHTML = "瀏覽器在線:" + online;
  14. }
  15. </script>
  16. </body>
  17. </html>

hasImage

hasImage(callback: AsyncCallback<boolean>): void

通過Callback方式異步查找當前頁面是否存在圖像。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

callback

AsyncCallback<boolean>

返回查找頁面是否存在圖像。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼。

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web compoent.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('hasImageCb')
  10. .onClick(() => {
  11. try {
  12. this.controller.hasImage((error, data) => {
  13. if (error) {
  14. console.info(`hasImage error: ` + JSON.stringify(error))
  15. return;
  16. }
  17. console.info("hasImage: " + data);
  18. });
  19. } catch (error) {
  20. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  21. }
  22. })
  23. Web({ src: 'www.example.com', controller: this.controller })
  24. }
  25. }
  26. }

hasImage

hasImage(): Promise<boolean>

通過Promise方式異步查找當前頁面是否存在圖像。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

返回值:

類型

說明

Promise<boolean>

Promise實例,返回查找頁面是否存在圖像。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼。

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web compoent.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('hasImagePm')
  10. .onClick(() => {
  11. try {
  12. this.controller.hasImage().then((data) => {
  13. console.info('hasImage: ' + data);
  14. })
  15. .catch(function (error) {
  16. console.error("error: " + error);
  17. })
  18. } catch (error) {
  19. console.error(`Errorcode: ${error.code}, Message: ${error.message}`);
  20. }
  21. })
  22. Web({ src: 'www.example.com', controller: this.controller })
  23. }
  24. }
  25. }

removeCache

removeCache(clearRom: boolean): void

清除應用中的資源緩存文件,此方法將會清除同一應用中所有webview的緩存文件。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

clearRom

boolean

設置為true時同時清除rom和ram中的緩存,設置為false時只清除ram中的緩存。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('removeCache')
  10. .onClick(() => {
  11. try {
  12. this.controller.removeCache(false);
  13. } catch (error) {
  14. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  15. }
  16. })
  17. Web({ src: 'www.example.com', controller: this.controller })
  18. }
  19. }
  20. }

pageUp

pageUp(top:boolean): void

將Webview的內容向上滾動半個視框大小或者跳轉到頁面最頂部,通過top入?yún)⒖刂啤?/p>

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

top

boolean

是否跳轉到頁面最頂部,設置為false時將頁面內容向上滾動半個視框大小,設置為true時跳轉到頁面最頂部。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼。

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('pageUp')
  10. .onClick(() => {
  11. try {
  12. this.controller.pageUp(false);
  13. } catch (error) {
  14. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  15. }
  16. })
  17. Web({ src: 'www.example.com', controller: this.controller })
  18. }
  19. }
  20. }

pageDown

pageDown(bottom:boolean): void

將Webview的內容向下滾動半個視框大小或者跳轉到頁面最底部,通過bottom入?yún)⒖刂啤?/p>

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

bottom

boolean

是否跳轉到頁面最底部,設置為false時將頁面內容向下滾動半個視框大小,設置為true時跳轉到頁面最底部。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('pageDown')
  10. .onClick(() => {
  11. try {
  12. this.controller.pageDown(false);
  13. } catch (error) {
  14. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  15. }
  16. })
  17. Web({ src: 'www.example.com', controller: this.controller })
  18. }
  19. }
  20. }

getBackForwardEntries

getBackForwardEntries(): BackForwardList

獲取當前Webview的歷史信息列表。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

返回值:

類型

說明

BackForwardList

當前Webview的歷史信息列表。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼。

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('getBackForwardEntries')
  10. .onClick(() => {
  11. try {
  12. let list = this.controller.getBackForwardEntries()
  13. } catch (error) {
  14. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  15. }
  16. })
  17. Web({ src: 'www.example.com', controller: this.controller })
  18. }
  19. }
  20. }

serializeWebState

serializeWebState(): Uint8Array

將當前Webview的頁面狀態(tài)歷史記錄信息序列化。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

返回值:

類型

說明

Uint8Array

當前Webview的頁面狀態(tài)歷史記錄序列化后的數(shù)據(jù)。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼。

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

示例:

  1. 對文件的操作需要導入文件管理模塊,詳情請參考文件管理
    1. // xxx.ets
    2. import web_webview from '@ohos.web.webview';
    3. import fs from '@ohos.file.fs';
    4. @Entry
    5. @Component
    6. struct WebComponent {
    7. controller: web_webview.WebviewController = new web_webview.WebviewController();
    8. build() {
    9. Column() {
    10. Button('serializeWebState')
    11. .onClick(() => {
    12. try {
    13. let state = this.controller.serializeWebState();
    14. // globalThis.cacheDir從MainAbility.ts中獲取。
    15. let path = globalThis.cacheDir;
    16. path += '/WebState';
    17. // 以同步方法打開文件。
    18. let file = fs.openSync(path, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
    19. fs.writeSync(file.fd, state.buffer);
    20. fs.closeSync(file.fd);
    21. } catch (error) {
    22. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
    23. }
    24. })
    25. Web({ src: 'www.example.com', controller: this.controller })
    26. }
    27. }
    28. }
  2. 修改MainAbility.ts。 獲取應用緩存文件路徑。
    1. // xxx.ts
    2. import UIAbility from '@ohos.app.ability.UIAbility';
    3. import web_webview from '@ohos.web.webview';
    4. export default class MainAbility extends UIAbility {
    5. onCreate(want, launchParam) {
    6. // 通過在globalThis對象上綁定cacheDir,可以實現(xiàn)UIAbility組件與Page之間的數(shù)據(jù)同步。
    7. globalThis.cacheDir = this.context.cacheDir;
    8. }
    9. }

restoreWebState

restoreWebState(state: Uint8Array): void

當前Webview從序列化數(shù)據(jù)中恢復頁面狀態(tài)歷史記錄。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

state

Uint8Array

頁面狀態(tài)歷史記錄序列化數(shù)據(jù)。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100001

Init error. The WebviewController must be associated with a Web component.

示例:

  1. 對文件的操作需要導入文件管理模塊,詳情請參考文件管理
    1. // xxx.ets
    2. import web_webview from '@ohos.web.webview';
    3. import fs from '@ohos.file.fs';
    4. @Entry
    5. @Component
    6. struct WebComponent {
    7. controller: web_webview.WebviewController = new web_webview.WebviewController();
    8. build() {
    9. Column() {
    10. Button('RestoreWebState')
    11. .onClick(() => {
    12. try {
    13. // globalThis.cacheDir從MainAbility.ts中獲取。
    14. let path = globalThis.cacheDir;
    15. path += '/WebState';
    16. // 以同步方法打開文件。
    17. let file = fs.openSync(path, fs.OpenMode.READ_WRITE);
    18. let stat = fs.statSync(path);
    19. let size = stat.size;
    20. let buf = new ArrayBuffer(size);
    21. fs.read(file.fd, buf, (err, readLen) => {
    22. if (err) {
    23. console.info("mkdir failed with error message: " + err.message + ", error code: " + err.code);
    24. } else {
    25. console.info("read file data succeed");
    26. this.controller.restoreWebState(new Uint8Array(buf.slice(0, readLen)));
    27. fs.closeSync(file);
    28. }
    29. });
    30. } catch (error) {
    31. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
    32. }
    33. })
    34. Web({ src: 'www.example.com', controller: this.controller })
    35. }
    36. }
    37. }
  2. 修改MainAbility.ts。 獲取應用緩存文件路徑。
    1. // xxx.ts
    2. import UIAbility from '@ohos.app.ability.UIAbility';
    3. import web_webview from '@ohos.web.webview';
    4. export default class MainAbility extends UIAbility {
    5. onCreate(want, launchParam) {
    6. // 通過在globalThis對象上綁定cacheDir,可以實現(xiàn)UIAbility組件與Page之間的數(shù)據(jù)同步。
    7. globalThis.cacheDir = this.context.cacheDir;
    8. }
    9. }

customizeSchemes

static customizeSchemes(schemes: Array<WebCustomScheme>): void

配置Web自定義協(xié)議請求的權限。建議在任何Web組件初始化之前進行調用。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

schemes

Array<WebCustomScheme>

自定義協(xié)議配置,最多支持同時配置10個自定義協(xié)議。

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. responseweb: WebResourceResponse = new WebResourceResponse()
  8. scheme1: web_webview.WebCustomScheme = {schemeName: "name1", isSupportCORS: true, isSupportFetch: true}
  9. scheme2: web_webview.WebCustomScheme = {schemeName: "name2", isSupportCORS: true, isSupportFetch: true}
  10. scheme3: web_webview.WebCustomScheme = {schemeName: "name3", isSupportCORS: true, isSupportFetch: true}
  11. aboutToAppear():void {
  12. try {
  13. web_webview.WebviewController.customizeSchemes([this.scheme1, this.scheme2, this.scheme3])
  14. } catch(error) {
  15. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  16. }
  17. }
  18. build() {
  19. Column() {
  20. Web({ src: 'www.example.com', controller: this.controller })
  21. .onInterceptRequest((event) => {
  22. console.log('url:' + event.request.getRequestUrl())
  23. return this.responseweb
  24. })
  25. }
  26. }
  27. }

WebCookieManager

通過WebCookie可以控制Web組件中的cookie的各種行為,其中每個應用中的所有web組件共享一個WebCookieManager實例。

說明

目前調用WebCookieManager下的方法,都需要先加載Web組件。

getCookie

static getCookie(url: string): string

獲取指定url對應cookie的值。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

url

string

要獲取的cookie所屬的url,建議使用完整的url。

返回值:

類型

說明

string

指定url對應的cookie的值。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼。

錯誤碼ID

錯誤信息

17100002

Invalid url.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('getCookie')
  10. .onClick(() => {
  11. try {
  12. let value = web_webview.WebCookieManager.getCookie('https://www.example.com');
  13. console.log("value: " + value);
  14. } catch (error) {
  15. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  16. }
  17. })
  18. Web({ src: 'www.example.com', controller: this.controller })
  19. }
  20. }
  21. }

setCookie

static setCookie(url: string, value: string): void

為指定url設置單個cookie的值。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

url

string

要設置的cookie所屬的url,建議使用完整的url。

value

string

要設置的cookie的值。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100002

Invalid url.

17100005

Invalid cookie value.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('setCookie')
  10. .onClick(() => {
  11. try {
  12. web_webview.WebCookieManager.setCookie('https://www.example.com', 'a=b');
  13. } catch (error) {
  14. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  15. }
  16. })
  17. Web({ src: 'www.example.com', controller: this.controller })
  18. }
  19. }
  20. }

saveCookieAsync

static saveCookieAsync(callback: AsyncCallback<void>): void

將當前存在內存中的cookie異步保存到磁盤中。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

callback

AsyncCallback<void>

callback回調,用于獲取cookie是否成功保存。

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('saveCookieAsync')
  10. .onClick(() => {
  11. try {
  12. web_webview.WebCookieManager.saveCookieAsync((error) => {
  13. if (error) {
  14. console.log("error: " + error);
  15. }
  16. })
  17. } catch (error) {
  18. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  19. }
  20. })
  21. Web({ src: 'www.example.com', controller: this.controller })
  22. }
  23. }
  24. }

saveCookieAsync

static saveCookieAsync(): Promise<void>

將當前存在內存中的cookie以Promise方法異步保存到磁盤中。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

返回值:

類型

說明

Promise<void>

Promise實例,用于獲取cookie是否成功保存。

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('saveCookieAsync')
  10. .onClick(() => {
  11. try {
  12. web_webview.WebCookieManager.saveCookieAsync()
  13. .then(() => {
  14. console.log("saveCookieAsyncCallback success!");
  15. })
  16. .catch((error) => {
  17. console.error("error: " + error);
  18. });
  19. } catch (error) {
  20. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  21. }
  22. })
  23. Web({ src: 'www.example.com', controller: this.controller })
  24. }
  25. }
  26. }

putAcceptCookieEnabled

static putAcceptCookieEnabled(accept: boolean): void

設置WebCookieManager實例是否擁有發(fā)送和接收cookie的權限。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

accept

boolean

設置是否擁有發(fā)送和接收cookie的權限。

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('putAcceptCookieEnabled')
  10. .onClick(() => {
  11. try {
  12. web_webview.WebCookieManager.putAcceptCookieEnabled(false);
  13. } catch (error) {
  14. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  15. }
  16. })
  17. Web({ src: 'www.example.com', controller: this.controller })
  18. }
  19. }
  20. }

isCookieAllowed

static isCookieAllowed(): boolean

獲取WebCookieManager實例是否擁有發(fā)送和接收cookie的權限。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

返回值:

類型

說明

boolean

是否擁有發(fā)送和接收cookie的權限,默認為true。

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('isCookieAllowed')
  10. .onClick(() => {
  11. let result = web_webview.WebCookieManager.isCookieAllowed();
  12. console.log("result: " + result);
  13. })
  14. Web({ src: 'www.example.com', controller: this.controller })
  15. }
  16. }
  17. }

putAcceptThirdPartyCookieEnabled

static putAcceptThirdPartyCookieEnabled(accept: boolean): void

設置WebCookieManager實例是否擁有發(fā)送和接收第三方cookie的權限。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

accept

boolean

設置是否擁有發(fā)送和接收第三方cookie的權限。

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('putAcceptThirdPartyCookieEnabled')
  10. .onClick(() => {
  11. try {
  12. web_webview.WebCookieManager.putAcceptThirdPartyCookieEnabled(false);
  13. } catch (error) {
  14. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  15. }
  16. })
  17. Web({ src: 'www.example.com', controller: this.controller })
  18. }
  19. }
  20. }

isThirdPartyCookieAllowed

static isThirdPartyCookieAllowed(): boolean

獲取WebCookieManager實例是否擁有發(fā)送和接收第三方cookie的權限。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

返回值:

類型

說明

boolean

是否擁有發(fā)送和接收第三方cookie的權限,默認為false。

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('isThirdPartyCookieAllowed')
  10. .onClick(() => {
  11. let result = web_webview.WebCookieManager.isThirdPartyCookieAllowed();
  12. console.log("result: " + result);
  13. })
  14. Web({ src: 'www.example.com', controller: this.controller })
  15. }
  16. }
  17. }

existCookie

static existCookie(): boolean

獲取是否存在cookie。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

返回值:

類型

說明

boolean

是否擁有發(fā)送和接收第三方cookie的權限。

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('existCookie')
  10. .onClick(() => {
  11. let result = web_webview.WebCookieManager.existCookie();
  12. console.log("result: " + result);
  13. })
  14. Web({ src: 'www.example.com', controller: this.controller })
  15. }
  16. }
  17. }

deleteEntireCookie

static deleteEntireCookie(): void

清除所有cookie。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('deleteEntireCookie')
  10. .onClick(() => {
  11. web_webview.WebCookieManager.deleteEntireCookie();
  12. })
  13. Web({ src: 'www.example.com', controller: this.controller })
  14. }
  15. }
  16. }

deleteSessionCookie

static deleteSessionCookie(): void

清除所有會話cookie。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview'
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('deleteSessionCookie')
  10. .onClick(() => {
  11. web_webview.WebCookieManager.deleteSessionCookie();
  12. })
  13. Web({ src: 'www.example.com', controller: this.controller })
  14. }
  15. }
  16. }

WebStorage

通過WebStorage可管理Web SQL數(shù)據(jù)庫接口和HTML5 Web存儲接口,每個應用中的所有Web組件共享一個WebStorage。

說明

目前調用WebStorage下的方法,都需要先加載Web組件。

deleteOrigin

static deleteOrigin(origin : string): void

清除指定源所使用的存儲。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

origin

string

指定源的字符串索引,來自于getOrigins

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼。

錯誤碼ID

錯誤信息

17100011

Invalid origin.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. origin: string = "file:///";
  8. build() {
  9. Column() {
  10. Button('deleteOrigin')
  11. .onClick(() => {
  12. try {
  13. web_webview.WebStorage.deleteOrigin(this.origin);
  14. } catch (error) {
  15. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  16. }
  17. })
  18. Web({ src: 'www.example.com', controller: this.controller })
  19. .databaseAccess(true)
  20. }
  21. }
  22. }

getOrigins

static getOrigins(callback: AsyncCallback<Array<WebStorageOrigin>>) : void

以回調方式異步獲取當前使用Web SQL數(shù)據(jù)庫的所有源的信息。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

callback

AsyncCallback<Array<WebStorageOrigin>>

以數(shù)組方式返回源的信息,信息內容參考WebStorageOrigin

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼。

錯誤碼ID

錯誤信息

17100012

Invalid web storage origin.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('getOrigins')
  10. .onClick(() => {
  11. try {
  12. web_webview.WebStorage.getOrigins((error, origins) => {
  13. if (error) {
  14. console.log('error: ' + JSON.stringify(error));
  15. return;
  16. }
  17. for (let i = 0; i < origins.length; i++) {
  18. console.log('origin: ' + origins[i].origin);
  19. console.log('usage: ' + origins[i].usage);
  20. console.log('quota: ' + origins[i].quota);
  21. }
  22. })
  23. } catch (error) {
  24. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  25. }
  26. })
  27. Web({ src: 'www.example.com', controller: this.controller })
  28. .databaseAccess(true)
  29. }
  30. }
  31. }

getOrigins

static getOrigins() : Promise<Array<WebStorageOrigin>>

以Promise方式異步獲取當前使用Web SQL數(shù)據(jù)庫的所有源的信息。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

返回值:

類型

說明

Promise<Array<WebStorageOrigin>>

Promise實例,用于獲取當前所有源的信息,信息內容參考WebStorageOrigin。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100012

Invalid web storage origin.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('getOrigins')
  10. .onClick(() => {
  11. try {
  12. web_webview.WebStorage.getOrigins()
  13. .then(origins => {
  14. for (let i = 0; i < origins.length; i++) {
  15. console.log('origin: ' + origins[i].origin);
  16. console.log('usage: ' + origins[i].usage);
  17. console.log('quota: ' + origins[i].quota);
  18. }
  19. })
  20. .catch(e => {
  21. console.log('error: ' + JSON.stringify(e));
  22. })
  23. } catch (error) {
  24. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  25. }
  26. })
  27. Web({ src: 'www.example.com', controller: this.controller })
  28. .databaseAccess(true)
  29. }
  30. }
  31. }

getOriginQuota

static getOriginQuota(origin : string, callback : AsyncCallback<number>) : void

使用callback回調異步獲取指定源的Web SQL數(shù)據(jù)庫的存儲配額,配額以字節(jié)為單位。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

origin

string

指定源的字符串索引

callback

AsyncCallback<number>

指定源的存儲配額

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼。

錯誤碼ID

錯誤信息

17100011

Invalid origin.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. origin: string = "file:///";
  8. build() {
  9. Column() {
  10. Button('getOriginQuota')
  11. .onClick(() => {
  12. try {
  13. web_webview.WebStorage.getOriginQuota(this.origin, (error, quota) => {
  14. if (error) {
  15. console.log('error: ' + JSON.stringify(error));
  16. return;
  17. }
  18. console.log('quota: ' + quota);
  19. })
  20. } catch (error) {
  21. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  22. }
  23. })
  24. Web({ src: 'www.example.com', controller: this.controller })
  25. .databaseAccess(true)
  26. }
  27. }
  28. }

getOriginQuota

static getOriginQuota(origin : string) : Promise<number>

以Promise方式異步獲取指定源的Web SQL數(shù)據(jù)庫的存儲配額,配額以字節(jié)為單位。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

origin

string

指定源的字符串索引

返回值:

類型

說明

Promise<number>

Promise實例,用于獲取指定源的存儲配額。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100011

Invalid origin.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. origin: string = "file:///";
  8. build() {
  9. Column() {
  10. Button('getOriginQuota')
  11. .onClick(() => {
  12. try {
  13. web_webview.WebStorage.getOriginQuota(this.origin)
  14. .then(quota => {
  15. console.log('quota: ' + quota);
  16. })
  17. .catch(e => {
  18. console.log('error: ' + JSON.stringify(e));
  19. })
  20. } catch (error) {
  21. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  22. }
  23. })
  24. Web({ src: 'www.example.com', controller: this.controller })
  25. .databaseAccess(true)
  26. }
  27. }
  28. }

getOriginUsage

static getOriginUsage(origin : string, callback : AsyncCallback<number>) : void

以回調方式異步獲取指定源的Web SQL數(shù)據(jù)庫的存儲量,存儲量以字節(jié)為單位。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

origin

string

指定源的字符串索引

callback

AsyncCallback<number>

指定源的存儲量。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100011

Invalid origin.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. origin: string = "file:///";
  8. build() {
  9. Column() {
  10. Button('getOriginUsage')
  11. .onClick(() => {
  12. try {
  13. web_webview.WebStorage.getOriginUsage(this.origin, (error, usage) => {
  14. if (error) {
  15. console.log('error: ' + JSON.stringify(error));
  16. return;
  17. }
  18. console.log('usage: ' + usage);
  19. })
  20. } catch (error) {
  21. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  22. }
  23. })
  24. Web({ src: 'www.example.com', controller: this.controller })
  25. .databaseAccess(true)
  26. }
  27. }
  28. }

getOriginUsage

static getOriginUsage(origin : string) : Promise<number>

以Promise方式異步獲取指定源的Web SQL數(shù)據(jù)庫的存儲量,存儲量以字節(jié)為單位。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

origin

string

指定源的字符串索引

返回值:

類型

說明

Promise<number>

Promise實例,用于獲取指定源的存儲量。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼。

錯誤碼ID

錯誤信息

17100011

Invalid origin.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. origin: string = "file:///";
  8. build() {
  9. Column() {
  10. Button('getOriginUsage')
  11. .onClick(() => {
  12. try {
  13. web_webview.WebStorage.getOriginUsage(this.origin)
  14. .then(usage => {
  15. console.log('usage: ' + usage);
  16. })
  17. .catch(e => {
  18. console.log('error: ' + JSON.stringify(e));
  19. })
  20. } catch (error) {
  21. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  22. }
  23. })
  24. Web({ src: 'www.example.com', controller: this.controller })
  25. .databaseAccess(true)
  26. }
  27. }
  28. }

deleteAllData

static deleteAllData(): void

清除Web SQL數(shù)據(jù)庫當前使用的所有存儲。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('deleteAllData')
  10. .onClick(() => {
  11. try {
  12. web_webview.WebStorage.deleteAllData();
  13. } catch (error) {
  14. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  15. }
  16. })
  17. Web({ src: 'www.example.com', controller: this.controller })
  18. .databaseAccess(true)
  19. }
  20. }
  21. }

WebDataBase

web組件數(shù)據(jù)庫管理對象。

說明

目前調用WebDataBase下的方法,都需要先加載Web組件。

getHttpAuthCredentials

static getHttpAuthCredentials(host: string, realm: string): Array<string>

檢索給定主機和域的HTTP身份驗證憑據(jù),該方法為同步方法。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

host

string

HTTP身份驗證憑據(jù)應用的主機。

realm

string

HTTP身份驗證憑據(jù)應用的域。

返回值:

類型

說明

Array<string>

包含用戶名和密碼的組數(shù),檢索失敗返回空數(shù)組。

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. host: string = "www.spincast.org";
  8. realm: string = "protected example";
  9. username_password: string[];
  10. build() {
  11. Column() {
  12. Button('getHttpAuthCredentials')
  13. .onClick(() => {
  14. try {
  15. this.username_password = web_webview.WebDataBase.getHttpAuthCredentials(this.host, this.realm);
  16. console.log('num: ' + this.username_password.length);
  17. } catch (error) {
  18. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  19. }
  20. })
  21. Web({ src: 'www.example.com', controller: this.controller })
  22. }
  23. }
  24. }

saveHttpAuthCredentials

static saveHttpAuthCredentials(host: string, realm: string, username: string, password: string): void

保存給定主機和域的HTTP身份驗證憑據(jù),該方法為同步方法。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

host

string

HTTP身份驗證憑據(jù)應用的主機。

realm

string

HTTP身份驗證憑據(jù)應用的域。

username

string

用戶名。

password

string

密碼。

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. host: string = "www.spincast.org";
  8. realm: string = "protected example";
  9. build() {
  10. Column() {
  11. Button('saveHttpAuthCredentials')
  12. .onClick(() => {
  13. try {
  14. web_webview.WebDataBase.saveHttpAuthCredentials(this.host, this.realm, "Stromgol", "Laroche");
  15. } catch (error) {
  16. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  17. }
  18. })
  19. Web({ src: 'www.example.com', controller: this.controller })
  20. }
  21. }
  22. }

existHttpAuthCredentials

static existHttpAuthCredentials(): boolean

判斷是否存在任何已保存的HTTP身份驗證憑據(jù),該方法為同步方法。存在返回true,不存在返回false。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

返回值:

類型

說明

boolean

是否存在任何已保存的HTTP身份驗證憑據(jù)。存在返回true,不存在返回false

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('existHttpAuthCredentials')
  10. .onClick(() => {
  11. try {
  12. let result = web_webview.WebDataBase.existHttpAuthCredentials();
  13. } catch (error) {
  14. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  15. }
  16. })
  17. Web({ src: 'www.example.com', controller: this.controller })
  18. }
  19. }
  20. }

deleteHttpAuthCredentials

static deleteHttpAuthCredentials(): void

清除所有已保存的HTTP身份驗證憑據(jù),該方法為同步方法。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('deleteHttpAuthCredentials')
  10. .onClick(() => {
  11. try {
  12. web_webview.WebDataBase.deleteHttpAuthCredentials();
  13. } catch (error) {
  14. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  15. }
  16. })
  17. Web({ src: 'www.example.com', controller: this.controller })
  18. }
  19. }
  20. }

GeolocationPermissions

web組件地理位置權限管理對象。

說明

目前調用GeolocationPermissions下的方法,都需要先加載Web組件。

需要權限

訪問地理位置時需添加權限:ohos.permission.LOCATION、ohos.permission.APPROXIMATELY_LOCATION、ohos.permission.LOCATION_IN_BACKGROUND,具體權限說明請參考位置服務

allowGeolocation

static allowGeolocation(origin: string): void

允許指定來源使用地理位置接口。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

origin

string

指定源的字符串索引

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100011

Invalid origin.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. origin: string = "file:///";
  8. build() {
  9. Column() {
  10. Button('allowGeolocation')
  11. .onClick(() => {
  12. try {
  13. web_webview.GeolocationPermissions.allowGeolocation(this.origin);
  14. } catch (error) {
  15. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  16. }
  17. })
  18. Web({ src: 'www.example.com', controller: this.controller })
  19. }
  20. }
  21. }

deleteGeolocation

static deleteGeolocation(origin: string): void

清除指定來源的地理位置權限狀態(tài)。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

origin

string

指定源的字符串索引

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100011

Invalid origin.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. origin: string = "file:///";
  8. build() {
  9. Column() {
  10. Button('deleteGeolocation')
  11. .onClick(() => {
  12. try {
  13. web_webview.GeolocationPermissions.deleteGeolocation(this.origin);
  14. } catch (error) {
  15. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  16. }
  17. })
  18. Web({ src: 'www.example.com', controller: this.controller })
  19. }
  20. }
  21. }

getAccessibleGeolocation

static getAccessibleGeolocation(origin: string, callback: AsyncCallback<boolean>): void

以回調方式異步獲取指定源的地理位置權限狀態(tài)。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

origin

string

指定源的字符串索引

callback

AsyncCallback<boolean>

返回指定源的地理位置權限狀態(tài)。獲取成功,true表示已授權,false表示拒絕訪問。獲取失敗,表示不存在指定源的權限狀態(tài)。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100011

Invalid origin.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. origin: string = "file:///";
  8. build() {
  9. Column() {
  10. Button('getAccessibleGeolocation')
  11. .onClick(() => {
  12. try {
  13. web_webview.GeolocationPermissions.getAccessibleGeolocation(this.origin, (error, result) => {
  14. if (error) {
  15. console.log('getAccessibleGeolocationAsync error: ' + JSON.stringify(error));
  16. return;
  17. }
  18. console.log('getAccessibleGeolocationAsync result: ' + result);
  19. });
  20. } catch (error) {
  21. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  22. }
  23. })
  24. Web({ src: 'www.example.com', controller: this.controller })
  25. }
  26. }
  27. }

getAccessibleGeolocation

static getAccessibleGeolocation(origin: string): Promise<boolean>

以Promise方式異步獲取指定源的地理位置權限狀態(tài)。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

origin

string

指定源的字符串索引。

返回值:

類型

說明

Promise<boolean>

Promise實例,用于獲取指定源的權限狀態(tài),獲取成功,true表示已授權,false表示拒絕訪問。獲取失敗,表示不存在指定源的權限狀態(tài)。

錯誤碼:

以下錯誤碼的詳細介紹請參見webview錯誤碼

錯誤碼ID

錯誤信息

17100011

Invalid origin.

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. origin: string = "file:///";
  8. build() {
  9. Column() {
  10. Button('getAccessibleGeolocation')
  11. .onClick(() => {
  12. try {
  13. web_webview.GeolocationPermissions.getAccessibleGeolocation(this.origin)
  14. .then(result => {
  15. console.log('getAccessibleGeolocationPromise result: ' + result);
  16. }).catch(error => {
  17. console.log('getAccessibleGeolocationPromise error: ' + JSON.stringify(error));
  18. });
  19. } catch (error) {
  20. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  21. }
  22. })
  23. Web({ src: 'www.example.com', controller: this.controller })
  24. }
  25. }
  26. }

getStoredGeolocation

static getStoredGeolocation(callback: AsyncCallback<Array<string>>): void

以回調方式異步獲取已存儲地理位置權限狀態(tài)的所有源信息。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

callback

AsyncCallback<Array<string>>

返回已存儲地理位置權限狀態(tài)的所有源信息。

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('getStoredGeolocation')
  10. .onClick(() => {
  11. try {
  12. web_webview.GeolocationPermissions.getStoredGeolocation((error, origins) => {
  13. if (error) {
  14. console.log('getStoredGeolocationAsync error: ' + JSON.stringify(error));
  15. return;
  16. }
  17. let origins_str: string = origins.join();
  18. console.log('getStoredGeolocationAsync origins: ' + origins_str);
  19. });
  20. } catch (error) {
  21. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  22. }
  23. })
  24. Web({ src: 'www.example.com', controller: this.controller })
  25. }
  26. }
  27. }

getStoredGeolocation

static getStoredGeolocation(): Promise<Array<string>>

以Promise方式異步獲取已存儲地理位置權限狀態(tài)的所有源信息。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

返回值:

類型

說明

Promise<Array<string>>

Promise實例,用于獲取已存儲地理位置權限狀態(tài)的所有源信息。

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('getStoredGeolocation')
  10. .onClick(() => {
  11. try {
  12. web_webview.GeolocationPermissions.getStoredGeolocation()
  13. .then(origins => {
  14. let origins_str: string = origins.join();
  15. console.log('getStoredGeolocationPromise origins: ' + origins_str);
  16. }).catch(error => {
  17. console.log('getStoredGeolocationPromise error: ' + JSON.stringify(error));
  18. });
  19. } catch (error) {
  20. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  21. }
  22. })
  23. Web({ src: 'www.example.com', controller: this.controller })
  24. }
  25. }
  26. }

deleteAllGeolocation

static deleteAllGeolocation(): void

清除所有來源的地理位置權限狀態(tài)。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. @Entry
  4. @Component
  5. struct WebComponent {
  6. controller: web_webview.WebviewController = new web_webview.WebviewController();
  7. build() {
  8. Column() {
  9. Button('deleteAllGeolocation')
  10. .onClick(() => {
  11. try {
  12. web_webview.GeolocationPermissions.deleteAllGeolocation();
  13. } catch (error) {
  14. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  15. }
  16. })
  17. Web({ src: 'www.example.com', controller: this.controller })
  18. }
  19. }
  20. }

WebHeader

Web組件返回的請求/響應頭對象。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

名稱

類型

可讀

可寫

說明

headerKey

string

請求/響應頭的key。

headerValue

string

請求/響應頭的value。

WebHitTestType

系統(tǒng)能力: SystemCapability.Web.Webview.Core

名稱

說明

EditText

0

可編輯的區(qū)域。

Email

1

電子郵件地址。

HttpAnchor

2

超鏈接,其src為http。

HttpAnchorImg

3

帶有超鏈接的圖片,其中超鏈接的src為http。

Img

4

HTML::img標簽。

Map

5

地理地址。

Phone

6

電話號碼。

Unknown

7

未知內容。

HitTestValue

提供點擊區(qū)域的元素信息。示例代碼參考getHitTestValue。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

名稱

類型

可讀

可寫

說明

type

WebHitTestType

當前被點擊區(qū)域的元素類型。

extra

string

點擊區(qū)域的附加參數(shù)信息。若被點擊區(qū)域為圖片或鏈接,則附加參數(shù)信息為其url地址。

WebMessage

用于描述WebMessagePort所支持的數(shù)據(jù)類型。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

類型

說明

string

字符串類型數(shù)據(jù)。

ArrayBuffer

二進制類型數(shù)據(jù)。

WebStorageOrigin

提供Web SQL數(shù)據(jù)庫的使用信息。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

名稱

類型

可讀

可寫

說明

origin

string

指定源的字符串索引。

usage

number

指定源的存儲量。

quota

number

指定源的存儲配額。

BackForwardList

當前Webview的歷史信息列表。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

名稱

類型

可讀

可寫

說明

currentIndex

number

當前在頁面歷史列表中的索引。

size

number

歷史列表中索引的數(shù)量,最多保存50條,超過時起始記錄會被覆蓋。

getItemAtIndex

getItemAtIndex(index: number): HistoryItem

獲取歷史列表中指定索引的歷史記錄項信息。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

參數(shù):

參數(shù)名

類型

必填

說明

index

number

指定歷史列表中的索引。

返回值:

類型

說明

HistoryItem

歷史記錄項。

示例:

  1. // xxx.ets
  2. import web_webview from '@ohos.web.webview';
  3. import image from "@ohos.multimedia.image"
  4. @Entry
  5. @Component
  6. struct WebComponent {
  7. controller: web_webview.WebviewController = new web_webview.WebviewController();
  8. @State icon: image.PixelMap = undefined;
  9. build() {
  10. Column() {
  11. Button('getBackForwardEntries')
  12. .onClick(() => {
  13. try {
  14. let list = this.controller.getBackForwardEntries();
  15. let historyItem = list.getItemAtIndex(list.currentIndex);
  16. console.log("HistoryItem: " + JSON.stringify(historyItem));
  17. this.icon = historyItem.icon;
  18. } catch (error) {
  19. console.error(`ErrorCode: ${error.code}, Message: ${error.message}`);
  20. }
  21. })
  22. Web({ src: 'www.example.com', controller: this.controller })
  23. }
  24. }
  25. }

HistoryItem

頁面歷史記錄項。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

名稱

類型

可讀

可寫

說明

icon

PixelMap

歷史頁面圖標的PixelMap對象。

historyUrl

string

歷史記錄項的url地址。

historyRawUrl

string

歷史記錄項的原始url地址。

title

string

歷史記錄項的標題。

WebCustomScheme

自定義協(xié)議配置。

系統(tǒng)能力: SystemCapability.Web.Webview.Core

名稱

類型

可讀

可寫

說明

schemeName

string

自定義協(xié)議名稱。最大長度為32,其字符僅支持小寫字母、數(shù)字、'.'、'+'、'-'。

isSupportCORS

boolean

是否支持跨域請求。

isSupportFetch

boolean

是否支持fetch請求。

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號