b6c02d88创建于 8 天前历史提交

ohos.web.webview(Webview)

说明:

当前为Beta阶段。

webview模块提供web控制能力,组件提供网页显示的能力。

导入模块

import kit.ArkWeb.*

权限列表

ohos.permission.APPROXIMATELY_LOCATION

ohos.permission.LOCATION

ohos.permission.LOCATION_IN_BACKGROUND

ohos.permission.INTERNET

使用说明

API示例代码使用说明:

  • 若示例代码首行有“// index.cj”注释,表示该示例可在仓颉模板工程的“index.cj”文件中编译运行。
  • 若示例需获取Context应用上下文,需在仓颉模板工程中的“main_ability.cj”文件中进行配置。

上述示例工程及配置模板详见接口使用说明

class BackForwardList

public class BackForwardList {}

功能: 当前Webview的历史信息列表。

说明:

示例效果请以真机运行为准,当前DevEco Studio预览器不支持。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

prop currentIndex

public prop currentIndex: Int32

功能: 当前页面在历史列表中的索引。

类型: Int32

读写能力: 只读

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

prop size

public prop size: Int32

功能: 历史列表中索引的数量,最多保存50条,超过时起始记录会被覆盖。

类型: Int32

读写能力: 只读

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

func getItemAtIndex(Int32)

public func getItemAtIndex(index: Int32): HistoryItem

功能: 获取历史列表中指定索引的历史记录项信息。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
index Int32 - 指定历史列表中的索引。

返回值:

类型 说明
HistoryItem 历史记录项。

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_0 {
    let webController = WebviewController()
    func build() {
        Column(space: 10) {
            Button("getItemAtIndex").onClick(
                {
                    evt =>
                        Hilog.info(0, "cangjieTest", "getItemAtIndex")
                        let backForwardList = webController.getBackForwardEntries()
                        let historyItem = backForwardList.getItemAtIndex(backForwardList.currentIndex)
                        Hilog.info(0, "cangjieTest", "Current historyUrl is ${historyItem.historyUrl}.")
                        Hilog.info(0, "cangjieTest", "Current historyRawUrl is ${historyItem.historyRawUrl}.")
                        Hilog.info(0, "cangjieTest", "Current title is ${historyItem.title}.")
                        let pixelMap = historyItem.icon
                        let byteInfo = pixelMap?.getPixelBytesNumber() ?? 0
                        Hilog.info(0, "cangjieTest", "icon byteInfo is ${byteInfo}")
                }
            ).width(400.px).height(150.px)
            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "cangjieTest", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "cangjieTest", "page end url: ${evt.url}")
            })
        }
    }
}

class HistoryItem

public class HistoryItem {
    public var icon: ?PixelMap
    public var historyUrl: String
    public var historyRawUrl: String
    public var title: String
}

功能: 页面历史记录项。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

var historyRawUrl

public var historyRawUrl: String

功能: 历史记录项的原始URL地址。

类型: String

读写能力: 可读写

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

var historyUrl

public var historyUrl: String

功能: 历史记录项的URL地址。

类型: String

读写能力: 可读写

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

var title

public var title: String

功能: 历史记录项的标题。

类型: String

读写能力: 可读写

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

var icon

public var icon: ?PixelMap

功能: 历史页面图标的PixelMap对象。

类型: ?PixelMap

读写能力: 可读写

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

class HitTestValue

public class HitTestValue {
    public var hitTestType: WebHitTestType
    public var extra: String
}

功能: 提供点击区域的元素信息。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

var extra

public var extra: String

功能: 点击区域的附加参数信息。若被点击区域为图片或链接,则附加参数信息为其url地址。

类型: String

读写能力: 可读写

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

var hitTestType

public var hitTestType: WebHitTestType

功能: 当前被点击区域的元素类型。

类型: WebHitTestType

读写能力: 可读写

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

class WebCookieManager

public class WebCookieManager {}

功能: 通过WebCookie可以控制Web组件中的cookie的各种行为,其中每个应用中的所有web组件共享一个WebCookieManager实例。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

static func clearAllCookies(Bool)

public static func clearAllCookies(incognito!: Bool = false): Unit

功能: 清除所有cookie。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
incognito Bool false 命名参数。 true表示清除隐私模式下Webview的所有内存cookies,false表示清除正常非隐私模式下的持久化cookies。
默认值:false。

示例:

// index.cj

import kit.ArkWeb.*
import ohos.business_exception.BusinessException
import kit.PerformanceAnalysisKit.Hilog

try {
    // cookie从web session中获取,如从http请求的request中获取。此示例中假设获取到的cookie为"ZFY=4Mvfh8V4iYFnDc8CGowMa3KE4m0dV"
    // 设置的cookie
    let cookie = "ZFY=4Mvfh8V4iYFnDc8CGowMa3KE4m0dV"
    // 设置指定url的cookie
    WebCookieManager.configCookie("https://www.example.com", cookie, incognito: false)
    // ... 
    // 此处执行业务逻辑,如加载带有cookie的网页。
    // 执行完后清除cookie
    WebCookieManager.clearAllCookies()
} catch (e: BusinessException) {
    Hilog.error(0, "AppLogCj", "ErrorCode: ${e.code}, ErrorMessage: ${e.message}")
}

static func clearSessionCookie()

public static func clearSessionCookie(): Unit

功能: 清除所有会话cookie。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

示例:

// index.cj

import kit.ArkWeb.*
import ohos.business_exception.BusinessException
import kit.PerformanceAnalysisKit.Hilog

try {
    // cookie从web session中获取,如从http请求的request中获取。此示例中假设获取到的cookie为"ZFY=4Mvfh8V4iYFnDc8CGowMa3KE4m0dV"
    // 设置的cookie
    let cookie = "ZFY=4Mvfh8V4iYFnDc8CGowMa3KE4m0dV"
    // 设置指定url的cookie
    WebCookieManager.configCookie("https://www.example.com", cookie, incognito: false)
    // ... 
    // 此处执行业务逻辑,如加载带有cookie的网页。
    // 执行完后清除cookie
    WebCookieManager.clearSessionCookie()
} catch (e: BusinessException) {
    Hilog.error(0, "AppLogCj", "ErrorCode: ${e.code}, ErrorMessage: ${e.message}")
}

static func configCookie(String, String, Bool)

public static func configCookie(url: String, value: String, incognito!: Bool = false): Unit

功能: 为指定URL设置cookie的值。

说明:

  • configCookie中的url,可以指定域名的方式来使得页面内请求也附带上cookie。

  • 同步cookie的时机建议在Web组件加载之前完成。

  • 若通过configCookie进行两次或多次设置cookie,则每次设置的cookie之间会通过"; "进行分隔。

  • cookie每30s周期性保存到磁盘中。

  • 若存在相同host、path和名称的cookie,将被新cookie替换。若设置的cookie已过期,则不会存储该cookie。如需设置多个cookie,应多次调用此方法。

  • value参数必须遵循Set-Cookie HTTP响应头的格式。形式为"key=value"的键值对,后面可跟随以分号分隔的cookie属性列表(例如"key=value;Max-Age=100")。

  • 如果指定的值包含"Secure"属性,则url必须使用"https://"协议。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
url String - 要设置的cookie所属的url,建议使用完整的url。
value String - 要设置的cookie的值。
incognito Bool false 命名参数。 true表示设置隐私模式下对应url的cookies,false表示设置正常非隐私模式下对应url的cookies。
默认值:false。

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100002 URL error. No valid cookie found for the specified URL.
    17100005 The provided cookie value is invalid. It must follow the format specified in RFC 6265.

示例:

// index.cj

import kit.ArkWeb.*
import ohos.business_exception.BusinessException
import kit.PerformanceAnalysisKit.Hilog

try {
    // cookie从web session中获取,如从http请求的request中获取。此示例中假设获取到的cookie为"ZFY=4Mvfh8V4iYFnDc8CGowMa3KE4m0dV"
    // 设置的cookie
    let cookie = "ZFY=4Mvfh8V4iYFnDc8CGowMa3KE4m0dV"
    // 设置指定url的cookie
    WebCookieManager.configCookie("https://www.example.com", cookie, incognito: false)
    // ... 
    // 此处执行业务逻辑,如加载带有cookie的网页。
    // 执行完后清除cookie
    WebCookieManager.clearSessionCookie()
} catch (e: BusinessException) {
    Hilog.error(0, "AppLogCj", "ErrorCode: ${e.code}, ErrorMessage: ${e.message}")
}

static func hasCookie(Bool)

public static func hasCookie(incognito!: Bool = false): Bool

功能: 获取是否存在cookie。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
incognito Bool false 命名参数。 true表示隐私模式下查询是否存在cookies,false表示正常非隐私模式下查询是否存在cookies。
默认值:false。

返回值:

类型 说明
Bool true表示存在cookie,false表示不存在cookie。

示例:

// index.cj

import kit.ArkWeb.*
import kit.PerformanceAnalysisKit.Hilog

let result = WebCookieManager.hasCookie()
Hilog.info(0, "AppLogCj", "WebCookiemanager result: ${result}")

static func fetchCookie(String, Bool)

public static func fetchCookie(url: String, incognito!: Bool = false): String

功能: 获取指定url对应cookie的值。

说明:

  • 系统会自动清理过期的cookie,对于同名key的数据,新数据将会覆盖前一个数据。

  • 为了获取可正常使用的cookie值,fetchCookie需传入完整链接。

  • fetchCookie用于获取所有的cookie值,每条cookie值之间会通过"; "进行分隔,但无法单独获取某一条特定的cookie值。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
url String - 要获取的cookie所属的url,建议使用完整的url。
incognito Bool false 命名参数。 true表示获取隐私模式下webview的内存cookies,false表示正常非隐私模式下的cookies。
默认值:false。

返回值:

类型 说明
String 指定url对应的cookie的值。

异常:

示例:

// index.cj

import kit.ArkWeb.*
import kit.PerformanceAnalysisKit.Hilog
import ohos.business_exception.BusinessException

try {
    // 需要设置的cookie,其中cookie的格式为name=value,本例中name为ZFY,value为4Mvfh8V4iYFnDc8CGowMa3KE4m0dV
    let cookie = "ZFY=4Mvfh8V4iYFnDc8CGowMa3KE4m0dV"
    // 设置指定url的cookie
    WebCookieManager.configCookie("https://www.example.com", cookie, incognito: false)
    // 设置完后获取指定url的cookie
    let value = WebCookieManager.fetchCookie("https://www.example.com")
    Hilog.info(0, "AppLogCj",  "WebCookieManager,fetchCookie cookie = ${value}", "")
} catch (e: BusinessException) {
    Hilog.error(0, "AppLogCj", "ErrorCode: ${e.code}, ErrorMessage: ${e.message}", "")
}

static func isCookieAllowed()

public static func isCookieAllowed(): Bool

功能: 获取WebCookieManager实例是否拥有发送和接收cookie的权限。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

返回值:

类型 说明
Bool 是否拥有发送和接收cookie的权限。
true表示拥有发送和接收cookie的权限,false表示无发送和接收cookie的权限。
默认值:true。

示例:

// index.cj

import kit.ArkWeb.*
import kit.PerformanceAnalysisKit.Hilog

let result = WebCookieManager.isCookieAllowed()
Hilog.info(0, "AppLogCj",  "WebCookieManager, result: ${result}")

static func isThirdPartyCookieAllowed()

public static func isThirdPartyCookieAllowed(): Bool

功能: 获取WebCookieManager实例是否拥有发送和接收第三方cookie的权限。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

返回值:

类型 说明
Bool 是否拥有发送和接收第三方cookie的权限。
true表示拥有发送和接收第三方cookie的权限,false表示无发送和接收第三方cookie的权限。
默认值:false。

示例:

// index.cj

import kit.ArkWeb.*
import kit.PerformanceAnalysisKit.Hilog

let result = WebCookieManager.isThirdPartyCookieAllowed()
Hilog.info(0, "AppLogCj",  "WebCookieManager, result: ${result}")

static func setAcceptCookiesEnabled(Bool)

public static func setAcceptCookiesEnabled(accept: Bool): Unit

功能: 设置WebCookieManager实例是否拥有发送和接收cookie的权限。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
accept Bool - 设置是否拥有发送和接收cookie的权限,true表示拥有发送和接收cookie的权限。

示例:

// index.cj

import kit.ArkWeb.*
import kit.PerformanceAnalysisKit.Hilog

WebCookieManager.setAcceptCookiesEnabled(false)

static func setAcceptThirdPartyCookieEnabled(Bool)

public static func setAcceptThirdPartyCookieEnabled(accept: Bool): Unit

功能: 设置WebCookieManager实例是否拥有发送和接收第三方cookie的权限。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
accept Bool - 是否允许设置、获取第三方cookie。
true表示允许设置、获取第三方cookie,false表示不允许设置、获取第三方cookie。

示例:

// index.cj

import kit.ArkWeb.*
import kit.PerformanceAnalysisKit.Hilog

WebCookieManager.setAcceptThirdPartyCookieEnabled(true)

class WebHeader

public class WebHeader {
    public var headerKey: String
    public var headerValue: String
    public init(headerKey: String, headerValue: String)
}

功能: Web组件返回的请求/响应头对象。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

var headerKey

public var headerKey: String

功能: 请求/响应头的key。

类型: String

读写能力: 可读写

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

var headerValue

public var headerValue: String

功能: 请求/响应头的value。

类型: String

读写能力: 可读写

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

init(String, String)

public init(headerKey: String, headerValue: String)

功能: WebHeader的构造函数。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
headerKey String - 请求/响应头的key。
headerValue String - 请求/响应头的value。

class WebviewController

public class WebviewController {
    public init(webTag!: ?String = None)
}

功能: 通过WebviewController可以控制Web组件各种行为(包括页面导航、生命周期状态、JavaScript交互等行为)。一个WebviewController对象只能控制一个Web组件,且必须在Web组件和WebviewController绑定后,才能调用WebviewController上的方法(静态方法除外)。

说明:

示例效果请以真机运行为准,当前DevEco Studio预览器不支持。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

init(?String)

public init(webTag!: ?String = None)

功能: 用于创建 WebviewController 对象的构造函数。

说明:

Web组件销毁后会解绑WebViewController,之后调用WebviewController的非静态方法会抛出17100001异常,应注意调用时机和捕获异常,防止进程异常退出。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
webTag ?String None 命名参数。 指定了Web组件的名称。

static func setWebDebuggingAccess(Bool)

public static func setWebDebuggingAccess(webDebuggingAccess: Bool): Unit

功能: 设置是否启用网页调试功能。

安全提示:启用网页调试功能可以让用户检查修改Web页面内部状态,存在安全隐患,不建议在应用正式发布版本中启用。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
webDebuggingAccess Bool - 设置是否启用网页调试功能。

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_1 {
    let webController = WebviewController()
    let headers = [WebHeader("headerKey", "headerValue")]
    func build() {
        Column(space: 10) {
            Button("setWebDebuggingAccess").onClick(
                {
                    evt =>
                        Hilog.info(0, "AppLogCj", "setWebDebuggingAccess")
                        WebviewController.setWebDebuggingAccess(true)
                }
            ).width(400.px).height(150.px)

            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "AppLogCj", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "AppLogCj", "page end url: ${evt.url}")
            })
        }
    }
}

func canGoBack()

public func canGoBack(): Bool

功能: 当前页面是否可后退,即当前页面是否有返回历史记录。

可以结合使用getBackForwardEntries来获取当前WebView的历史信息列表,以及使用accessStep来判断是否可以按照给定的步数前进或后退。

说明:

  • 在Web组件首次加载过程中调用setCustomUserAgent,可能会导致在当前存在多个历史节点的情况下,获取的canGoBack实际为false,即没有后退节点。建议先调用setCustomUserAgent方法设置UserAgent,再通过loadUrl加载具体页面。

  • 该现象是由于在Web组件首次加载时,调用setCustomUserAgent会导致组件重新加载并保持初始历史节点的状态。随后新增的节点将替换初始历史节点,不会生成新的历史节点,导致canGoBack为false。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

返回值:

类型 说明
Bool 当前页面可以后退返回true,否则返回false。

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_2 {
    let webController = WebviewController()
    func build() {
        Column(space: 10) {
            Button("canGoBack").onClick(
                {
                    evt =>
                        Hilog.info(0, "cangjieTest", "canGoBack")
                        let bool = webController.canGoBack()
                        Hilog.info(0, "cangjieTest", "canGoBack returns ${bool}")
                }
            ).width(400.px).height(150.px)

            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "cangjieTest", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "cangjieTest", "page end url: ${evt.url}")
            })
        }
    }
}

func accessStep(Int32)

public func accessStep(step: Int32): Bool

功能: 当前页面是否可前进或者后退给定的step步。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
step Int32 - 要跳转的步数,正数代表前进,负数代表后退。

返回值:

类型 说明
Bool 页面是否前进或后退。
返回true表示可以前进或者后退,返回false表示不可以前进或后退。

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkUI.Text
import kit.ArkUI.ObservedProperty
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_3 {
    var message: String = "Hello World"
    let webController = WebviewController()
    func build() {
        Column(space: 10) {
            Button("accessStep")
            Text(this.message).onClick(
                {
                    evt =>
                        Hilog.info(0, "cangjieTest", "accessStep")
                        let access = webController.accessStep(2)
                        Hilog.info(0, "cangjieTest", "accessStep returns: ${access}")
                }
            ).width(400.px).height(150.px)

            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "cangjieTest", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "cangjieTest", "page end url: ${evt.url}")
            })
        }
    }
}

func goBackOrForward(Int32)

public func goBackOrForward(step: Int32): Unit

功能: 按照历史栈,前进或者后退指定步长的页面,当历史栈中不存在对应步长的页面时,不会进行页面跳转。

前进或者后退页面时,直接使用已加载过的网页,无需重新加载网页。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
step Int32 - 需要前进或后退的步长。

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_4 {
    let webController = WebviewController()
    func build() {
        Column(space: 10) {
            Button("goBackOrForward").onClick(
                {
                    evt =>
                        Hilog.info(0, "cangjieTest", "goBackOrForward")
                        webController.goBackOrForward(-2)
                }
            ).width(400.px).height(150.px)

            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "cangjieTest", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "cangjieTest", "page end url: ${evt.url}")
            })
        }
    }
}

func goBack()

public func goBack(): Unit

功能: 按照历史栈,后退一个页面。一般结合canGoBack一起使用。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_5 {
    let webController = WebviewController()
    func build() {
        Column(space: 10) {
            Button("goBack").onClick(
                {
                    evt =>
                        Hilog.info(0, "cangjieTest", "goBack")
                        webController.goBack()
                }
            ).width(400.px).height(150.px)

            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "cangjieTest", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "cangjieTest", "page end url: ${evt.url}")
            })
        }
    }
}

func clearHistory()

public func clearHistory(): Unit

功能: 删除所有前进后退记录,不建议在onPageBegin中调用clearHistory,会造成异常退出。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_6 {
    let webController = WebviewController()
    func build() {
        Column(space: 10) {
            Button("clearHistory").onClick(
                {
                    evt =>
                        Hilog.info(0, "cangjieTest", "clearHistory")
                        webController.clearHistory()
                }
            ).width(400.px).height(150.px)

            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "cangjieTest", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "cangjieTest", "page end url: ${evt.url}")
            })
        }
    }
}

func enableSafeBrowsing(Bool)

public func enableSafeBrowsing(enable: Bool): Unit

功能: 启用检查网站安全风险的功能,非法和欺诈网站是强制启用的,不能通过此功能禁用。 本功能默认不生效,OpenHarmony只提供恶意网址拦截页WebUI,网址风险检测以及显示WebUI的功能由Vendor实现。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
enable Bool - 是否启用检查网站安全风险的功能。

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_7 {
    let webController = WebviewController()
    func build() {
        Column(space: 10) {
            Button("enableSafeBrowsing").onClick(
                {
                    evt =>
                        Hilog.info(0, "cangjieTest", "enableSafeBrowsing")
                        webController.enableSafeBrowsing(true)
                }
            ).width(400.px).height(150.px)

            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "cangjieTest", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "cangjieTest", "page end url: ${evt.url}")
            })
        }
    }
}

func goForward()

public func goForward(): Unit

功能: 按照历史栈,前进一个页面。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_8 {
    let webController = WebviewController()
    func build() {
        Column(space: 10) {
            Button("goForward").onClick(
                {
                    evt =>
                        Hilog.info(0, "cangjieTest", "goForward")
                        webController.goForward()
                }
            ).width(400.px).height(150.px)

            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "cangjieTest", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "cangjieTest", "page end url: ${evt.url}")
            })
        }
    }
}

func getBackForwardEntries()

public func getBackForwardEntries(): BackForwardList

功能: 获取当前Webview的历史信息列表。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

返回值:

类型 说明
BackForwardList 当前Webview的历史信息列表。

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_9 {
    let webController = WebviewController()
    func build() {
        Column(space: 10) {
            Button("getBackForwardEntries").onClick(
                {
                    evt =>
                        Hilog.info(0, "cangjieTest", "getBackForwardEntries")
                        let backForwardList = webController.getBackForwardEntries()
                        Hilog.info(0, "cangjieTest", "backForwardList currentIndex is ${backForwardList.currentIndex}")
                        Hilog.info(0, "cangjieTest", "backForwardList size is ${backForwardList.size}")
                }
            ).width(400.px).height(150.px)

            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "cangjieTest", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "cangjieTest", "page end url: ${evt.url}")
            })
        }
    }
}

func getCustomUserAgent()

public func getCustomUserAgent(): String

功能: 获取自定义用户代理。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

返回值:

类型 说明
String 用户自定义代理信息。

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_10 {
    let webController = WebviewController()
    let headers = [WebHeader("headerKey", "headerValue")]
    func build() {
        Column(space: 10) {
            Button("getCustomUserAgent").onClick(
                {
                    evt =>
                        Hilog.info(0, "cangjieTest", "getCustomUserAgent")
                        let agent = webController.getCustomUserAgent()
                        Hilog.info(0, "cangjieTest", "getCustomUserAgent returns ${agent}")
                }
            ).width(400.px).height(150.px)

            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "cangjieTest", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "cangjieTest", "page end url: ${evt.url}")
            })
        }
    }
}

func getOriginalUrl()

public func getOriginalUrl(): String

功能: 获取当前页面的原始URL地址。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

返回值:

类型 说明
String 当前页面的原始URL地址。

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_13 {
    let webController = WebviewController()
    func build() {
        Column(space: 10) {
            Button("getOriginalUrl").onClick(
                {
                    evt =>
                        Hilog.info(0, "cangjieTest", "getOriginalUrl")
                        let url = webController.getOriginalUrl()
                        Hilog.info(0, "cangjieTest", "getOriginalUrl is ${url}")
                }
            ).width(400.px).height(150.px)

            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "cangjieTest", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "cangjieTest", "page end url: ${evt.url}")
            })
        }
    }
}

func getPageHeight()

public func getPageHeight(): Int32

功能: 获取当前网页的页面高度。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

返回值:

类型 说明
Int32 当前网页的页面高度。

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_14 {
    let webController = WebviewController()
    func build() {
        Column(space: 10) {
            Button("getOriginalUrl").onClick(
                {
                    evt =>
                        Hilog.info(0, "cangjieTest", "getOriginalUrl")
                        let height = webController.getPageHeight()
                }
            ).width(400.px).height(150.px)
        }
    }
}

func getSecurityLevel()

public func getSecurityLevel(): SecurityLevel

功能: 获取当前网页的安全级别。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

返回值:

类型 说明
SecurityLevel 当前网页的安全级别,具体值为NoneLevel、Secure、Warning、Dangerous。

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_15 {
    let webController = WebviewController()
    func build() {
        Column(space: 10) {
            Button("getSecurityLevel").onClick(
                {
                    evt =>
                        Hilog.info(0, "cangjieTest", "getSecurityLevel")
                        let securityLevel = webController.getSecurityLevel()
                        match (securityLevel) {
                            case SecurityLevel.NoneLevel => Hilog.info(0, "cangjieTest",
                                "getSecurityLevel returns NoneLevel")
                            case SecurityLevel.Secure => Hilog.info(0, "cangjieTest", "getSecurityLevel returns Secure")
                            case SecurityLevel.Warning => Hilog.info(0, "cangjieTest",
                                "getSecurityLevel returns Warning ")
                            case SecurityLevel.Dangerous => Hilog.info(0, "cangjieTest",
                                "getSecurityLevel returns Dangerous")
                            case _ => throw IllegalArgumentException("The type is not supported.")
                        }
                }
            ).width(400.px).height(150.px)
            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "cangjieTest", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "cangjieTest", "page end url: ${evt.url}")
            })
        }
    }
}

func getTitle()

public func getTitle(): String

功能: 获取当前网页的标题。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

返回值:

类型 说明
String 当前网页的标题。

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_16 {
    let webController = WebviewController()
    func build() {
        Column(space: 10) {
            Button("getTitle").onClick(
                {
                    evt =>
                        Hilog.info(0, "cangjieTest", "getTitle")
                        let title = webController.getTitle()
                        Hilog.info(0, "cangjieTest", "getTitle returns ${title}")
                }
            ).width(400.px).height(150.px)

            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "cangjieTest", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "cangjieTest", "page end url: ${evt.url}")
            })
        }
    }
}

func getUrl()

public func getUrl(): String

功能: 获取当前页面的url地址。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

返回值:

类型 说明
String 当前页面的url地址。

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_17 {
    let webController = WebviewController()
    func build() {
        Column(space: 10) {
            Button("getUrl").onClick(
                {
                    evt =>
                        Hilog.info(0, "cangjieTest", "getUrl")
                        let url = webController.getUrl()
                        Hilog.info(0, "cangjieTest", "getUrl is ${url}")
                }
            ).width(400.px).height(150.px)
            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "cangjieTest", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "cangjieTest", "page end url: ${evt.url}")
            })
        }
    }
}

func getUserAgent()

public func getUserAgent(): String

功能: 获取当前默认用户代理。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

返回值:

类型 说明
String 默认用户代理。

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_18 {
    let webController = WebviewController()
    let headers = [WebHeader("headerKey", "headerValue")]
    func build() {
        Column(space: 10) {
            Button("getUserAgent").onClick(
                {
                    evt =>
                        Hilog.info(0, "cangjieTest", "getUserAgent")
                        webController.getUserAgent()
                }
            ).width(400.px).height(150.px)

            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "cangjieTest", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "cangjieTest", "page end url: ${evt.url}")
            })
        }
    }
}

func isIncognitoMode()

public func isIncognitoMode(): Bool

功能: 查询当前是否是隐私模式的Webview。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

返回值:

类型 说明
Bool 返回是否是隐私模式的Webview。
true表示是隐私模式,false表示不是隐私模式。
默认为false。

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_19 {
    let webController = WebviewController()
    func build() {
        Column(space: 10) {
            Button("isIncognitoMode").onClick(
                {
                    evt =>
                        Hilog.info(0, "cangjieTest", "isIncognitoMode")
                        let bool = webController.isIncognitoMode()
                        Hilog.info(0, "cangjieTest", "isIncognitoMode returns ${bool}")
                }
            ).width(400.px).height(150.px)

            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "cangjieTest", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "cangjieTest", "page end url: ${evt.url}")
            })
        }
    }
}

func isSafeBrowsingEnabled()

public func isSafeBrowsingEnabled(): Bool

功能: 获取当前网页是否启用了检查网站安全风险。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

返回值:

类型 说明
Bool 当前网页是否启用了检查网站安全风险的功能。
true表示启用了检查网站安全风险的功能,false表示未启用检查网站安全风险的功能。
默认值:false。

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_20 {
    let webController = WebviewController()
    func build() {
        Column(space: 10) {
            Button("isSafeBrowsingEnabled").onClick(
                {
                    evt =>
                        Hilog.info(0, "cangjieTest", "isSafeBrowsingEnabled")
                        let bool = webController.isSafeBrowsingEnabled()
                        Hilog.info(0, "cangjieTest", "isSafeBrowsingEnabled returns ${bool}")
                }
            ).width(400.px).height(150.px)
            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "cangjieTest", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "cangjieTest", "page end url: ${evt.url}")
            })
        }
    }
}

func pageDown(Bool)

public func pageDown(bottom: Bool): Unit

功能: 将Webview的内容向下滚动半个视框大小或者跳转到页面最底部,通过bottom入参控制。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
bottom Bool - 是否跳转到页面最底部。
false时表示将页面内容向下滚动半个视框大小,true表示跳转到页面最底部。

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_21 {
    let webController = WebviewController()
    func build() {
        Column(space: 10) {
            Button("pageDown").onClick(
                {
                    evt =>
                        Hilog.info(0, "cangjieTest", "pageDown")
                        webController.pageDown(true)
                }
            ).width(400.px).height(150.px)

            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "cangjieTest", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "cangjieTest", "page end url: ${evt.url}")
            })
        }
    }
}

func pageUp(Bool)

public func pageUp(top: Bool): Unit

功能: 将Webview的内容向上滚动半个视框大小或者跳转到页面最顶部,通过top入参控制。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
top Bool - 是否跳转到页面最顶部。
false表示将页面内容向上滚动半个视框大小,true表示跳转到页面最顶部。

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_22 {
    let webController = WebviewController()
    func build() {
        Column(space: 10) {
            Button("pageUp").onClick(
                {
                    evt =>
                        Hilog.info(0, "cangjieTest", "pageUp")
                        webController.pageUp(true)
                }
            ).width(400.px).height(150.px)

            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "cangjieTest", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "cangjieTest", "page end url: ${evt.url}")
            })
        }
    }
}

func reload()

public func reload(): Unit

功能: 调用此接口通知Web组件刷新网页。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_23 {
    let webController = WebviewController()
    let headers = [WebHeader("headerKey", "headerValue")]
    func build() {
        Column(space: 10) {
            Button("reload").onClick(
                {
                    evt =>
                        Hilog.info(0, "cangjieTest", "reload")
                        webController.reload()
                }
            ).width(400.px).height(150.px)

            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "cangjieTest", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "cangjieTest", "page end url: ${evt.url}")
            })
        }
    }
}

func registerJavaScriptProxy(Array<(String) -> String>, String, Array<String>)

public func registerJavaScriptProxy(funcs: Array<(String) -> String>, name: String, methodList: Array<String>): Unit

功能: 注入仓颉方法到Window对象中,并在window对象中调用该方法。注册后,须调用reload接口生效。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
funcs Array<(String)->String> - 参与注册的应用侧仓颉方法数组。注册的仓颉方法的入参和返回值都是String类型。
name String - 注册仓颉方法数组的名称,与window中调用的对象名一致。注册后window对象可以通过此名字访问应用侧仓颉方法。
methodList Array<String> - 参与注册的应用侧仓颉方法名,此数组的长度需要与funcs数组一致。注册完成后,后续如果想注册新的、或更改funcs,需要传入新的methodList。

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.
    17100015 New failed, out of memory.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkUI.Row
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog
import ohos.business_exception.*

let webController = WebviewController()
let callback: AsyncCallback<String> = {
    errorCode: Option<BusinessException>, data: Option<String> => match (errorCode) {
        case Some(e) => Hilog.error(0, "test", "callback error: errcode is ${e.code}")
        case _ => match (data) {
            case Some(value) =>
                Hilog.info(0, "test", "callback: get data successfully and data is ${value.toArray()}")
                Hilog.info(0, "test", "callback: get data successfully and data is ${value}")
            case _ => Hilog.error(0, "test", "callback: data is null")
        }
    }
}

@Entry
@Component
class webview_24 {
    func build() {
        Row {
            Column {
                Button("reload").onClick(
                    {
                        evt =>
                            Hilog.info(0, "test", "reload")
                            webController.reload()
                    }
                ).width(400.px).height(150.px)
                Button("proxy").onClick(
                    {
                        evt =>
                            Hilog.info(0, "test", "registerJavaScriptProxy")
                            let funcA1 = {
                                a: String =>
                                    Hilog.info(0, "test", "funcA1 ${a}")
                                    return "funcA1 " + a
                            }
                            let funcA2 = {
                                a: String =>
                                    Hilog.info(0, "test", "funcA2 ${a}")
                                    return "funcA2 " + a
                            }
                            let funcA3 = {
                                a: String =>
                                    Hilog.info(0, "test", "funcA3 ${a}")
                                    return "funcA3 " + a
                            }
                            let funcB1 = {
                                a: String =>
                                    Hilog.info(0, "test", "funcB1 ${a}")
                                    return "funcB1 " + a
                            }
                            let funcB2 = {
                                a: String =>
                                    Hilog.info(0, "test", "funcB2 ${a}")
                                    return "funcB2 " + a
                            }
                            let funcB3 = {
                                a: String =>
                                    Hilog.info(0, "test", "funcB3 ${a}")
                                    return "funcB3 " + a
                            }
                            let funcsA = [funcA1, funcA2, funcA3]
                            let funcsB = [funcB1, funcB2, funcB3]
                            let methodListA = ["testFunA1", "testFunA2", "testFunA3"]
                            let methodListB = ["testFunB1", "testFunB2", "testFunB3"]
                            try {
                                webController.registerJavaScriptProxy(funcsA, "testObjA", methodListA)
                                webController.registerJavaScriptProxy(funcsB, "testObjB", methodListB)
                            } catch (e: Exception) {
                                Hilog.info(0, "test", e.message)
                            }
                    }
                ).width(400.px).height(150.px)
                Button("runProxy").onClick(
                    {
                        evt =>
                            Hilog.info(0, "test", "runProxy")
                            webController.runJavaScript("testObjA.testFunA2('someData')", callback)
                            webController.runJavaScript("testObjB.testFunB2('someData')", callback)
                    }
                ).width(400.px).height(150.px)

                Web(src: "www.example.com", controller: webController).onPageBegin({
                    evt => Hilog.info(0, "test", "page begin url: ${evt.url}")
                }).onPageEnd({
                    evt => Hilog.info(0, "test", "page end url: ${evt.url}")
                })
            }.width(100.percent)
        }.height(100.percent)
    }
}

加载的html文件。需要在entry\src\main\resources\rawfile目录下新增index.html文件。

<!-- index.html -->
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<body>
<button type="button" onclick="htmlTest()">Click Me!</button>
<p id="demo"></p>
<p id="webDemo"></p>
</body>
<script type="text/javascript">
    function htmlTest() {
      // This function call expects to return "ArkUI Web Component"
      let AStr=testObjA.testFunA2("A2 data");
      let BStr=testObjB.testFunB1("B1 data");
      testObjA.testFunA3("A3 data");
      document.getElementById("demo").innerHTML=AStr;
      document.getElementById("webDemo").innerHTML=BStr;
      console.log('objName.test result:'+ str)
    }
</script>
</html>

func loadUrl<T>(T, Array<WebHeader>) where T <: ResourceStr

public func loadUrl<T>(url: T, headers!: Array<WebHeader> = Array<WebHeader>()): Unit where T <: ResourceStr

功能: 加载指定的URL。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
url T - 需要加载的URL。
headers Array<WebHeader> Array<WebHeader>() 命名参数。 URL的附加HTTP请求头。
默认值:Array<WebHeader>()。

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.
    17100002 URL error. The webpage corresponding to the URL is invalid.
    17100003 Invalid resource path or file type.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog
import ohos.arkui.state_macro_manage.rawfile

@Entry
@Component
class webview_25 {
    let webController = WebviewController()
    let headers = [WebHeader("headerKey", "headerValue")]
    func build() {
        Column(space: 10) {
            Button("loadUrl").onClick(
                {
                    evt =>
                        Hilog.info(0, "test", "loadUrl")
                        webController.loadUrl(@rawfile("index.html"), headers: headers)
                }
            ).width(400.px).height(150.px)

            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "test", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "test", "page end url: ${evt.url}")
            })
        }
    }
}

func setCustomUserAgent(String)

public func setCustomUserAgent(userAgent: String): Unit

功能: 设置自定义用户代理,会覆盖系统的用户代理。

不建议将User-Agent设置在onLoadIntercept回调事件中,会概率性出现设置失败。

当Web组件src设置为空字符串时,建议先调用setCustomUserAgent方法设置User-Agent,再通过loadUrl加载具体页面。

说明:

当Web组件src设置了url,再调用setCustomUserAgent方法时,可能会出现加载的页面与实际设置User-Agent不符的异常现象。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
userAgent String - 用户自定义代理信息。建议先使用getUserAgent获取当前默认用户代理,在此基础上追加自定义用户代理信息。

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_26 {
    let webController = WebviewController()
    let headers = [WebHeader("headerKey", "headerValue")]
    func build() {
        Column(space: 10) {
            Button("setCustomUserAgent").onClick(
                {
                    evt =>
                        Hilog.info(0, "test", "setCustomUserAgent")
                        webController.setCustomUserAgent("ua")
                }
            ).width(400.px).height(150.px)

            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "test", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "test", "page end url: ${evt.url}")
            })
        }
    }
}

func stop()

public func stop(): Unit

功能: 停止页面加载。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_27 {
    let webController = WebviewController()
    func build() {
        Column(space: 10) {
            Button("stop").onClick(
                {
                    evt =>
                        Hilog.info(0, "test", "stop")
                        webController.stop()
                }
            ).width(400.px).height(150.px)

            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "test", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "test", "page end url: ${evt.url}")
            })
        }
    }
}

func storeWebArchive(String, Bool, AsyncCallback<String>)

public func storeWebArchive(baseName: String, autoName: Bool, callback: AsyncCallback<String>): Unit

功能: 以回调方式保存当前页面。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
baseName String - 生成的离线网页存储位置,该值不能为空。
autoName Bool - 决定是否自动生成文件名。如果为false,则按baseName的文件名存储;如果为true,则根据当前Url自动生成文件名,并按baseName的文件目录存储。
callback AsyncCallback<String> - 返回文件存储路径,保存网页失败会返回空字符串。

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.
    17100003 Invalid resource path or file type.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog
import ohos.business_exception.*

let callback1: AsyncCallback<String> = {
    errorCode: Option<BusinessException>, data: Option<String> => match (errorCode) {
        case Some(e) => Hilog.error(0, "test", "callback error: errcode is ${e.code}")
        case _ => match (data) {
            case Some(value) => Hilog.info(0, "test", "callback: get data successfully and data is ${value}")
            case _ => Hilog.error(0, "test", "callback: data is null")
        }
    }
}

@Entry
@Component
class webview_28 {
    let webController = WebviewController()
    func build() {
        Column(space: 10) {
            Button("storeWebArchive").onClick(
                {
                    evt =>
                        Hilog.info(0, "test", "storeWebArchive")
                        webController.storeWebArchive("/data/storage/el2/base/", true, callback1)
                }
            ).width(400.px).height(150.px)

            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "test", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "test", "page end url: ${evt.url}")
            })
        }
    }
}

func zoom(Float32)

public func zoom(factor: Float32): Unit

功能: 调整当前网页的缩放比例,zoomAccess需为true。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
factor Float32 - 基于当前网页所需调整的相对缩放比例,入参要求大于0,当入参为1时为默认加载网页的缩放比例,入参小于1为缩小,入参大于1为放大。
取值范围:(0,100]。

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.
    17100004 Function not enabled.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_29 {
    let webController = WebviewController()
    func build() {
        Column(space: 10) {
            Button("zoom").onClick(
                {
                    evt =>
                        Hilog.info(0, "test", "zoom")
                        webController.zoom(2.5)
                }
            ).width(400.px).height(150.px)

            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "test", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "test", "page end url: ${evt.url}")
            })
        }
    }
}

func zoomIn()

public func zoomIn(): Unit

功能: 调用此接口将当前网页进行放大,比例为25%。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.
    17100004 Function not enabled.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_30 {
    let webController = WebviewController()
    func build() {
        Column(space: 10) {
            Button("zoomIn").onClick(
                {
                    evt =>
                        Hilog.info(0, "test", "zoomIn")
                        webController.zoomIn()
                }
            ).width(400.px).height(150.px)

            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "test", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "test", "page end url: ${evt.url}")
            })
        }
    }
}

func zoomOut()

public func zoomOut(): Unit

功能: 调用此接口将当前网页进行缩小,比例为20%。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.
    17100004 Function not enabled.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_31 {
    let webController = WebviewController()
    func build() {
        Column(space: 10) {
            Button("zoomOut").onClick(
                {
                    evt =>
                        Hilog.info(0, "test", "zoomOut")
                        webController.zoomOut()
                }
            ).width(400.px).height(150.px)

            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "test", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "test", "page end url: ${evt.url}")
            })
        }
    }
}

func runJavaScript(String, AsyncCallback<String>)

public func runJavaScript(script: String, callback: AsyncCallback<String>): Unit

功能: 在当前显示页面的上下文中执行JavaScript脚本,脚本执行的结果将通过回调方式返回。此方法必须在用户界面(UI)线程上使用,并且回调也将在用户界面(UI)线程上调用。

说明:

  • 跨导航操作(如loadUrl)时,JavaScript状态将不再保留。例如,调用loadUrl前定义的全局变量和函数在加载的页面中将不存在。
  • 建议应用程序使用registerJavaScriptProxy来确保JavaScript状态能够在页面导航间保持。
  • 目前不支持传递对象,支持传递结构体。
  • 前端页面传到Native的string数据类型会被视为json格式的数据,需要调用JSON.parse反序列化。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
script String - JavaScript脚本。
callback AsyncCallback<String> - 回调执行JavaScript脚本结果。JavaScript脚本若执行失败或无返回值时,返回字符串null。

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog
import ohos.business_exception.*
import ohos.arkui.state_macro_manage.rawfile
import ohos.resource.__GenerateResource__

let callback2: AsyncCallback<String> = {
    errorCode: Option<BusinessException>, data: Option<String> => match (errorCode) {
        case Some(e) => Hilog.error(0, "test", "callback error: errcode is ${e.code}")
        case _ => match (data) {
            case Some(value) => Hilog.info(0, "test", "callback: get data successfully and data is ${value}")
            case _ => Hilog.error(0, "test", "callback: data is null")
        }
    }
}

@Entry
@Component
class webview_32 {
    let webController = WebviewController()
    func build() {
        Column(space: 10) {
            Button("runJavaScript").onClick(
                {
                    evt =>
                        Hilog.info(0, "test", "runJavaScript")
                        webController.runJavaScript("test()", callback2)
                }
            ).width(400.px).height(150.px)

            Web(src: @rawfile("index.html"), controller: webController).onPageBegin({
                evt => Hilog.info(0, "test", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "test", "page end url: ${evt.url}")
            })
        }
    }
}

加载的html文件。需要在entry\src\main\resources\rawfile目录下新增index.html文件。

<!-- index.html -->
<!DOCTYPE html>
<html>
  <meta charset="utf-8">
  <body>
      Hello world!
  </body>
  <script type="text/javascript">
  function test() {
      console.log('Ark WebComponent')
      return "This value is from index.html"
  }
  </script>
</html>

func scrollBy(Float32, Float32, ?Int32)

public func scrollBy(deltaX: Float32, deltaY: Float32, duration!: ?Int32 = None): Unit

功能: 在指定时间内将页面滚动指定的偏移量。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
deltaX Float32 - 水平偏移量,其中水平向右为正方向。
单位:vp。
deltaY Float32 - 垂直偏移量,其中垂直向下为正方向。
单位:vp。
duration ?Int32 None 命名参数。 滚动动画时间。
单位:ms。
不传入为无动画,当传入数值为负数或传入0时,按照不传入处理。

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_33 {
    let webController = WebviewController()
    func build() {
        Column(space: 10) {
            Button("scrollBy").onClick(
                {
                    evt =>
                        Hilog.info(0, "test", "scrollBy")
                        webController.scrollBy(50.0, 50.0)
                }
            ).width(400.px).height(150.px)

            Web(src: ("index.html"), controller: webController).onPageBegin({
                evt => Hilog.info(0, "test", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "test", "page end url: ${evt.url}")
            })
        }
    }
}

加载的html文件。需要在entry\src\main\resources\rawfile目录下新增index.html文件。

<!--index.html-->
<!DOCTYPE html>
<html>
<head>
    <title>Demo</title>
    <style>
        body {
            width:3000px;
            height:3000px;
            padding-right:170px;
            padding-left:170px;
            border:5px solid blueviolet
        }
    </style>
</head>
<body>
Scroll Test
</body>
</html>

func scrollTo(Float32, Float32, ?Int32)

public func scrollTo(x: Float32, y: Float32, duration!: ?Int32 = None): Unit

功能: 在指定时间内,将页面滚动到指定的绝对位置。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
x Float32 - 绝对位置的水平坐标,当传入数值为负数时,按照传入0处理。
单位:vp。
y Float32 - 绝对位置的垂直坐标,当传入数值为负数时,按照传入0处理。
单位:vp。
duration ?Int32 None 命名参数。 滚动动画时间。
单位:ms。
不传入为无动画,当传入数值为负数或传入0时,按照不传入处理。

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_34 {
    let webController = WebviewController()
    func build() {
        Column(space: 10) {
            Button("scrollTo").onClick(
                {
                    evt =>
                        Hilog.info(0, "test", "scrollTo")
                        webController.scrollTo(50.0, 50.0)
                }
            ).width(400.px).height(150.px)

            Web(src: ("index.html"), controller: webController).onPageBegin({
                evt => Hilog.info(0, "test", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "test", "page end url: ${evt.url}")
            })
        }
    }
}

加载的html文件。需要在entry\src\main\resources\rawfile目录下新增index.html文件。

<!--index.html-->
<!DOCTYPE html>
<html>
<head>
    <title>Demo</title>
    <style>
        body {
            width:3000px;
            height:3000px;
            padding-right:170px;
            padding-left:170px;
            border:5px solid blueviolet
        }
    </style>
</head>
<body>
Scroll Test
</body>
</html>

func removeCache(Bool)

public func removeCache(clearRom: Bool): Unit

功能: 清除应用中的资源缓存文件,此方法将会清除同一应用中所有Webview的缓存文件。

说明:

可以通过在data/storage/el2/base/cache/web/Cache目录下查看Webview的缓存。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
clearRom Bool - 设置为true时同时清除ROM和RAM中的缓存,设置为false时只清除RAM中的缓存。

异常:

  • BusinessException:对应错误码如下表,详见Webview错误码

    错误码ID 错误信息
    17100001 Init error. The WebviewController must be associated with a Web component.

示例:

// index.cj

import kit.ArkUI.LengthProp
import kit.ArkUI.Button
import kit.ArkUI.Column
import kit.ArkUI.CustomView
import kit.ArkUI.CJEntry
import kit.ArkUI.loadNativeView
import kit.ArkUI.SubscriberManager
import kit.ArkUI.LocalStorage
import ohos.arkui.state_macro_manage.Entry
import ohos.arkui.state_macro_manage.Component
import kit.ArkWeb.*
import kit.ArkUI.Web
import kit.PerformanceAnalysisKit.Hilog

@Entry
@Component
class webview_35 {
    let webController = WebviewController()
    func build() {
        Column(space: 10) {
            Button("removeCache").onClick(
                {
                    evt =>
                        Hilog.info(0, "test", "removeCache")
                        webController.removeCache(true)
                }
            ).width(400.px).height(150.px)

            Web(src: "www.example.com", controller: webController).onPageBegin({
                evt => Hilog.info(0, "test", "page begin url: ${evt.url}")
            }).onPageEnd({
                evt => Hilog.info(0, "test", "page end url: ${evt.url}")
            })
        }
    }
}

enum SecurityLevel

public enum SecurityLevel <: Equatable<SecurityLevel> & ToString {
    | NoneLevel
    | Secure
    | Warning
    | Dangerous
    | ...
}

功能: 当前网页的安全级别。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

父类型:

NoneLevel

NoneLevel

功能: 页面既不绝对安全,也不是不安全,即是中立。例如,部分scheme非http/https的URL。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

Secure

Secure

功能: 页面安全,页面使用的是HTTPS协议,且使用了信任的证书。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

Warning

Warning

功能: 页面不安全。例如,使用HTTP协议或使用HTTPS协议但使用旧版TLS版本。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

Dangerous

Dangerous

功能: 页面不安全。尝试HTTPS并失败、页面未通过身份验证、页面上包含不安全活动内容的HTTPS、恶意软件、网络钓鱼或任何其他可能危险的严重安全问题。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

func !=(SecurityLevel)

public operator func !=(other: SecurityLevel): Bool

功能: 判断两个枚举值是否不等。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
other SecurityLevel - 待比较的另一个枚举值。

返回值:

类型 说明
Bool 如果两个枚举值不等,返回true,否则返回false。

func ==(SecurityLevel)

public operator func ==(other: SecurityLevel): Bool

功能: 判断两个枚举值是否相等。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
other SecurityLevel - 待比较的另一个枚举值。

返回值:

类型 说明
Bool 如果两个枚举值相等,返回true,否则返回false。

func toString()

public func toString(): String

功能: 获取枚举的字符串表示。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

返回值:

类型 说明
String 枚举的字符串表示。

enum WebHitTestType

public enum WebHitTestType <: Equatable<WebHitTestType> & ToString {
    | EditText
    | Email
    | Unknown
    | ...
}

功能: 用于指示游标节点。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

父类型:

EditText

EditText

功能: 可编辑的区域。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

Email

Email

功能: 电子邮件地址。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

Unknown

Unknown

功能: 未知内容。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

func !=(WebHitTestType)

public operator func !=(other: WebHitTestType): Bool

功能: 判断两个枚举值是否不等。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
other WebHitTestType - 待比较的另一个枚举值。

返回值:

类型 说明
Bool 如果两个枚举值不等,返回true,否则返回false。

func ==(WebHitTestType)

public operator func ==(other: WebHitTestType): Bool

功能: 判断两个枚举值是否相等。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

参数:

参数名 类型 必填 默认值 说明
other WebHitTestType - 待比较的另一个枚举值。

返回值:

类型 说明
Bool 如果两个枚举值相等,返回true,否则返回false。

func toString()

public func toString(): String

功能: 获取枚举的字符串表示。

系统能力: SystemCapability.Web.Webview.Core

起始版本: 22

返回值:

类型 说明
String 枚举的字符串表示。