Skip to content

webview

molysama edited this page Oct 26, 2020 · 12 revisions

本模块封装了webview的功能,并提供了比较便捷的双向通信功能。 Auto.pro部分版本的JavaAdapter存在bug,无法正常使用webview,目前已知无法使用的版本: Auto.pro 7.0.4-1 ~ Auto.pro 8.0.2。

安装模块

npm i "@auto.pro/webview" -S

启用插件并加载网页

import core from "@auto.pro/core"
import { run } from "@auto.pro/webview"

core()

const htmlPath = 'http://www.baidu.com'
const wv = run(htmlPath)

// wv.on可以监听对应的prompt事件,这里监听一个prompt('submit')事件
wv.on('submit').subscribe(([param, done]) => {
  // done必须要执行一次,括号内是给html的返回值,可以留空
  done()
  
  // 执行aj的代码
  toastLog('点击了submit按钮')
})

API说明

run (url: string, option?: object)

  • option.xmlString: string
    可自定义webview的容器xml,默认为一个占全屏的webview
  • option.webviewId: string
    当自定义webview的xml时,需要指定webviewId,应与xml内webview的id一致,默认为webview
  • option.afterLayout: Function
    在布局初始化完毕后可使用此函数紧跟

run成功执行之后会得到一个对象,对象有以下方法和属性

on(eventName: string, callback: Function): Observable

on可以监听到HTML发送的prompt事件,下面是一个示例

//------------    html 部分    -------------
document.getElementById('btn').onclick = () => {
  var params = { x: 1, y: 2 }
  prompt('hello', JSON.stringify(params))
}

//---------------- auto 部分   --------------
const webview = run(htmlPath)

webview.on('hello').subscribe(([param, done]) => {

    toastLog(`点击了登录按钮,获得参数${param}`)

    // 使用done给html返回结果,这里返回获得的参数
    done(param)

    webview.runHtmlJS('document.title').subscribe(v => {
      toastLog(`title is ${v}`)
    })
})

点击HTML的btn时,会发送一个prompt事件,此时将触发auto对hello的监听,并得到一个参数(params),如果hello的回调有返回值,则HTML会获取到该值。这就是HTML向auto通信的过程。

off(eventName: string): void

取消对应on的监听

runHtmlFunction(fnName: string, ...options): Observable

此函数能使auto执行HTML的fnName方法,返回一个Observable对象。示例如下:

webview.runHtmlFunction('console.log', 'helloworld').subscribe(value => {
})

runHtmlJS(jsString: string): Observable

runHtmlFunction相似,但是它可以执行任意JS语句,比如获取网页的标题:

webview.runHtmlJS('document.title').subscribe(value => {
  toastLog(`title is ${value}`)
})

webview: UIObject

指向对应webviewId的auto对象