# JS端 window.JsView API

在Js中通过一下的api,可以进行JsView内置的交互。(PS: jJsvRuntimeBridge是和MiniApp层次的交互,而此为和MiniApp下的JsView进行交互),调用方法为(ES6的option chain写法):

window.JsView?.xxxxxx?.()

# getJsContextId

/**
 * 获取 JsContext 的Id, 此Id在reload后会变化
 * @returns int类型,当前的JsContext ID
 */
getJsContextId()
1
2
3
4
5

# setMiniAppSignUrl

/**
 * 设置小程序内核授权文件的服务器位置,授权文件里面会包含AppName和签名信息,校验不过右下角会显示水印
 * @param url String类型,授权文件的服务器位置
 */
setMiniAppSignUrl(url)
1
2
3
4
5

# addEventListener

/**
 * 注册监听从java端发过来的消息, 消息从Java的 JsView.emitEvent 发送过来
 * @param eventName String类型,消息名称
 *        jsview内置事件:
 *          onImageLoadError 图片加载错误
 * @param callback 回调函数(eventBundle), eventBundle为对象,是经过JSON.parse后的结果
 *        jsview内置事件bundle结构:
 *          onImageLoadError: { url: string, errorCode: int, detailCode: int }
 *            url: 图片url
 *            errorCode: 失败类型
 *              1: 图片下载失败
 *              2: 解码失败
 *            detailCode: 错误详情code
 *              图片下载失败:
 *                1: 下载错误
 *                2: 未知主机错误
 *                3: io错误
 *                4: 空文件错误
 *                6: MD5校验错误
 */
addEventListener(event_name, callback)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# removeEventListener

/**
 * 注册监听从java端发过来的消息, 消息从Java的 JsView.emitEvent 发送过来
 * @param eventName String类型,消息名称
 * @param callback addEventListener对应的同款回调函数的句柄
 */
removeEventListener(event_name, callback)
1
2
3
4
5
6

# removeEventCallback

/**
 * 注册监听从java端发过来的消息, 消息从Java的 JsView.emitEvent 发送过来
 * @param callback 和addEventListener中对应的callback
 */
removeEventCallback(callback)
1
2
3
4
5

# getVisibility

/**
 * MiniAppManager是一个单进程多JsView框架,用于获取当前的JsView是否在前台
 * @returns String类型, show 或者 hide
 */
getVisibility()
1
2
3
4
5

# onVisibilityChange

/**
 * 从调用时间点开始,监听后续的JsView可视化变化,当前状态请使用getVisibility接口
 * 取消监听时,请复用 removeEventCallback(callback) 接口
 * @param callback 回调函数(statusObj), statusObj的格式为{"status":"show|hide"}进行JSON.parse后的结果
 */
onVisibilityChange(callback)
1
2
3
4
5
6

getVisibility 与 onVisibilityChange 结合的样例

let jsvVisible = shallowRef(undefined);
// 先注册监听,再获取当前值, 避免获取值后和注册监听之间可视状态变化导致漏处理
window.JsView?.onVisibilityChange((newStatus/* 这是对象,要用.status取值 */)=>{
    jsvVisible.value = newStatus.status;
    if (newStatus.status == "show") {
        // 当变成显示时的处理,对应Android activity的onStart,或者内部小程序切换到前台
    } else if (newStatus.status == "hide") {
        // 当变成隐藏时的处理, 对应场景如home键, 或者小程序切换后自己到后台
    }
});
jsvVisible.value = window.JsView?.getVisibility(); // 获取当前值, 其值为"show"或者"hide"

// 解决无window.JsView场景的默认值(PC调试场景)
jsvVisible.value = jsvVisible.value ? jsvVisible.value : "show";
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# getNetStatus

/**
 * 获取app当前的网络状态
 * @returns Object类型, 信息目前为{NetType(none/wifi/ethernet/mobile), Connected(true/false)}的JSON.parse结果
 */
getNetStatus()
1
2
3
4
5

# onNetStatusChange

/**
 * 从调用时间点开始,监听后续APP的网络变化,当前状态请用 getNetStatus 获取
 * 取消监听时,请复用 removeEventCallback(callback) 接口
 * @param callback 回调函数(statusObj), statusObj的格式为{NetType(none/wifi/ethernet/mobile), Connected(true/false)}的JSON.parse结果
 */
onNetStatusChange(callback)
1
2
3
4
5
6

getNetStatus 与 onNetStatusChange 结合的样例

let netConnected = shallowRef(undefined);
// 先注册监听,再获取当前值, 避免获取值后和注册监听之间网络改变漏处理
window.JsView?.onNetStatusChange((newStatus)=>{
    netConnected.value = newStatus;
});
netConnected.value = window.JsView?.getNetStatus(); // 获取当前值

// 解决无window.JsView场景的默认值(PC调试场景)
netConnected.value = netConnected.value ? netConnected.value : {NetType:"ethernet", Connected:true}; 
1
2
3
4
5
6
7
8
9

# onNetReady

/**
 * 跟踪网络是否正常,当网络状态好的时候调用,仅调用一次
 * @param callback 回调函数(无参数)
 */
onNetReady(callback)
1
2
3
4
5

# setIgnoreSizeCheckWebSites

/**
 * 设置不进行HEAD校验的资源文件所在的网站(图片或者音频、视频)
 * @param webSites Array(String)类型, 内含的网址是 http:// 或 https:// 打头的字符串
 */
setIgnoreSizeCheckWebSites(webSites)
1
2
3
4
5

# loadFont

/**
 * 加载字体字库,请控制尺寸在5M以内,因为默认本地缓存大小为5M,单个小程序使用空间不要冲过这个尺寸
 * @param font_family_name String类型,字体名字,在css的font-family中对应
 * @param url String类型,font文件下载地址,有缓存
 * @param on_load 回调函数,成功后回调
 * @param on_error 回调函数,加载失败时回调
 */
loadFont(font_family_name, url, on_load, on_error)
1
2
3
4
5
6
7
8

# enableDevtoolsStarterBreak

/**
 * 启用devtools的启动时暂停功能,激活后,reload处理会等到devtools连接后才继续执行
 * 激活后,会在加载完main.js后自动断住,等待断点信息的加载
 * 此状态会在进程重启后重置
 * 
 * @param to_enable Bool类型, true:激活, false:关闭,默认为关闭
 */
enableDevtoolsStarterBreak(to_enable)
1
2
3
4
5
6
7
8

# setAutoUriEncode

/**
 * 用于取消 xmlhttprequest 自动对内容进行URIEncode处理
 * 此状态会在reload处理后重置
 * 
 * @param enable Bool类型, true:激活, false:关闭, 默认为激活
 */
setAutoUriEncode(enable)
1
2
3
4
5
6
7

# showUiCover

/**
 * 显示UI遮罩,为了平滑Activity切换的效果,在Activity退到后台的时候调用,遮挡JsView上所有UI
 * 
 * @param red_int int类型, 0-255
 * @param green_int int类型, 0-255
 * @param blue_int int类型, 0-255
 * @param alpha_float float类型, 0.0 - 1.0
 */
showUiCover(red_int, green_int, blue_int, alpha_float)
1
2
3
4
5
6
7
8
9

# hideUiCover

/**
 * 去掉UI遮罩,为了平滑Activity切换的效果,在Activity返回前台并且认为UI加载完毕后调用,和showUiCover配套
 */
hideUiCover()
1
2
3
4

# simKeyEvent

/**
 * 用于向jsview自身发送模拟按键
 * 
 * @param keyCode int类型, js 按键值
 * @param keyAction int类型, 0: keyDown, 1:keyUp, -1/不设置: 模拟点击(即down/up各发一次)
 */
simKeyEvent(keyCode, keyAction)
1
2
3
4
5
6
7
/**
 * 设置延迟描画状态时, 立即描画的个数
 * @param {number} value 个数
 */
setInstantRenderNum(value);
1
2
3
4
5
/**
 * 获取延迟描画状态时, 立即描画的个数
 * @return {number} 个数
 */
getInstantRenderNum()
1
2
3
4
5
/**
 * 调用android的Log.d
 * @param {string} tag tag
 * @param {...*} msgs 信息
 */
logD(tag, ...msgs)
1
2
3
4
5
6
/**
 * 调用android的Log.e
 * @param {string} tag tag
 * @param {...*} msgs 信息
 */
logE(tag, ...msgs)
1
2
3
4
5
6
/**
 * 设置磁盘缓存空间的大小
 * @param {int} size 空间大小, 单位MB
 */
setLruCacheSize(size)
1
2
3
4
5
/**
 * 为全局网络调用追加用于帮助服务器进行请求跟踪的头信息
 * 再次设置的header,优先级高于native端的JsView.appendNetTraceHeader接口内容
 * 但优先级低于 axios 以及图片requestHeader(暂时无法通过标签设置)设置的header
 * 
 * @param {Object} headerMap key-value形式的object
 */
appendNetTraceHeaders(headerMap)
1
2
3
4
5
6
7
8
/**
 * 开启全局js错误监听者,或者注销监听
 * addGlobalJsExceptionAck/removeGlobalJsExceptionAck
 *
 * @param callback function类型, 发生js exception后的回调, 参数(name{string}, message{string}, stack{string})
 */
addGlobalJsExceptionAck(callback)

removeGlobalJsExceptionAck(callback)
1
2
3
4
5
6
7
8
9
Last Updated: 10/30/2024, 5:58:42 AM