# 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
2
3
4
5
# setMiniAppSignUrl
/**
* 设置小程序内核授权文件的服务器位置,授权文件里面会包含AppName和签名信息,校验不过右下角会显示水印
* @param url String类型,授权文件的服务器位置
*/
setMiniAppSignUrl(url)
1
2
3
4
5
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
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
2
3
4
5
6
# removeEventCallback
/**
* 注册监听从java端发过来的消息, 消息从Java的 JsView.emitEvent 发送过来
* @param callback 和addEventListener中对应的callback
*/
removeEventCallback(callback)
1
2
3
4
5
2
3
4
5
# getVisibility
/**
* MiniAppManager是一个单进程多JsView框架,用于获取当前的JsView是否在前台
* @returns String类型, show 或者 hide
*/
getVisibility()
1
2
3
4
5
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
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
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
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
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
2
3
4
5
6
7
8
9
# onNetReady
/**
* 跟踪网络是否正常,当网络状态好的时候调用,仅调用一次
* @param callback 回调函数(无参数)
*/
onNetReady(callback)
1
2
3
4
5
2
3
4
5
# setIgnoreSizeCheckWebSites
/**
* 设置不进行HEAD校验的资源文件所在的网站(图片或者音频、视频)
* @param webSites Array(String)类型, 内含的网址是 http:// 或 https:// 打头的字符串
*/
setIgnoreSizeCheckWebSites(webSites)
1
2
3
4
5
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
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
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
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
2
3
4
5
6
7
8
9
# hideUiCover
/**
* 去掉UI遮罩,为了平滑Activity切换的效果,在Activity返回前台并且认为UI加载完毕后调用,和showUiCover配套
*/
hideUiCover()
1
2
3
4
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
2
3
4
5
6
7
/**
* 设置延迟描画状态时, 立即描画的个数
* @param {number} value 个数
*/
setInstantRenderNum(value);
1
2
3
4
5
2
3
4
5
/**
* 获取延迟描画状态时, 立即描画的个数
* @return {number} 个数
*/
getInstantRenderNum()
1
2
3
4
5
2
3
4
5
/**
* 调用android的Log.d
* @param {string} tag tag
* @param {...*} msgs 信息
*/
logD(tag, ...msgs)
1
2
3
4
5
6
2
3
4
5
6
/**
* 调用android的Log.e
* @param {string} tag tag
* @param {...*} msgs 信息
*/
logE(tag, ...msgs)
1
2
3
4
5
6
2
3
4
5
6
/**
* 设置磁盘缓存空间的大小
* @param {int} size 空间大小, 单位MB
*/
setLruCacheSize(size)
1
2
3
4
5
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
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
2
3
4
5
6
7
8
9