# JS端 window.JsvCoreApi API
在Js中通过一下的api,可以进行JsView内置的交互。(PS: jJsvRuntimeBridge是和MiniApp层次的交互,而此为和MiniApp下的JsView进行交互),调用方法为(ES6的option chain写法):
window.JsvCoreApi.xxxxxx?.(...)
# setLruCacheSize
/**
* 设置磁盘缓存空间的大小, 默认为30M, 用于缓存下载的js文件和图片, 以最后访问时间为标准进行删除管理
* 建议在ROM充分时扩大到150M以上(满屏满TAB的EPG的1080P海报一般为150M左右)
* 此API相较android端的api, 有延后一次才生效的问题, 如方便,建议在android端控制
*
* @param {int} size 空间大小, 单位MB
*/
setLruCacheSize(size)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# getJsContextId
/**
* 获取 JsContext 的Id, 此Id在reload后会变化
* @returns int类型,当前的JsContext ID
*/
getJsContextId()
1
2
3
4
5
2
3
4
5
# getCurrentTimeMs
/**
* 获取经过网络时间同步后的时间
* @returns {number} 当前时间戳,单位毫秒
*/
getCurrentTimeMs()
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.JsvCoreApi?.onVisibilityChange((newStatus/* 这是对象,要用.status取值 */)=>{
jsvVisible.value = newStatus.status;
if (newStatus.status == "show") {
// 当变成显示时的处理,对应Android activity的onStart,或者内部小程序切换到前台
} else if (newStatus.status == "hide") {
// 当变成隐藏时的处理, 对应场景如home键, 或者小程序切换后自己到后台
}
});
jsvVisible.value = window.JsvCoreApi?.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.JsvCoreApi?.onNetStatusChange((newStatus)=>{
netConnected.value = newStatus;
});
netConnected.value = window.JsvCoreApi?.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
# onActivityStateChange
/**
* 从调用时间点开始,监听对应的Activity的状态变化
* 取消监听时,请复用 removeEventCallback(callback) 接口
*
* @param callback 回调函数(jsonObject), jsonObject(已经被JSON.parse解析好)格式为{"State":"状态值"}
* 状态值有:
* onActivityStarted
* onActivityStopped
* onActivityResumed
* onActivityPaused
*/
onActivityStateChange(callback)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# setIgnoreSizeCheckWebSites
/**
* 设置不进行HEAD校验的资源文件所在的网站(图片或者音频、视频)
* 否则默认的下载行为都是先请求HEADER, 再请求内容, 会有两次握手行为
* @param webSites Array(String)类型, 内含的网址是 http:// 或 https:// 打头的字符串
*/
setIgnoreSizeCheckWebSites(webSites)
1
2
3
4
5
6
2
3
4
5
6
# 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
# activeHidingSwap
/**
* 激活view不可见时的swap信息同步功能
* 1. 解决响应view hide的界面调整(例如遮罩界面)的显示的需求(自动调用)
* 2. 后台收到消息想先刷新界面时(暂无场景)
* @param valid_time 持续时间,可不设置,默认为2000(2秒)
* @param vaoid_swap_max 最多支持的swap次数(解决有些图片需要多次swap进行加载的场景), 可不设置, 默认为1
* 当时间有效并且剩余次数足够时,RequestSwap才能进行hiding swap处理
*/
activeHidingSwap(valid_time, vaoid_swap_max)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 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
# setInstantRenderNum
/**
* 设置延迟描画状态时, 立即描画的个数
* @param {number} value 个数
*/
setInstantRenderNum(value);
1
2
3
4
5
2
3
4
5
# getInstantRenderNum
/**
* 获取延迟描画状态时, 立即描画的个数
* @return {number} 个数
*/
getInstantRenderNum()
1
2
3
4
5
2
3
4
5
# reduceFps
/**
* 用于JsView fps刷新率, 主要场景是低性能盒子,全屏视频播放场景, 通过降低jsview刷新率
* 为视频播放的流畅性留出GPU性能空间
*
* @param fps int类型, 0-60, 当设置成0时,则表示取消降低fps设置
*/
reduceFps(fps)
1
2
3
4
5
6
7
2
3
4
5
6
7
# enableFpsDisplay
/**
* 开启JsView自有的fps和显示资源内存占用, 用于调优
*
* @param enable bool类型, 开启或者关闭
*/
enableFpsDisplay(enable)
1
2
3
4
5
6
2
3
4
5
6
# triggerTextureRecycle
/**
* 通知系统做一次图片内存清理,将所有不是正在显示的texture都释放掉
* 目前此接口为调试接口, 用于确认代码调整和内存使用上的映照
* (改代码介绍展示内容后通过此接口进行内存清理以确认内存减少的量)
* 调用后, 如果enableFpsDisplay(true)进行内存监控的话,可以看到内存统计下降
*/
triggerTextureRecycle()
1
2
3
4
5
6
7
2
3
4
5
6
7
# logD
/**
* 调用android的Log.d
* @param {string} tag tag
* @param {...*} msgs 信息
*/
logD(tag, ...msgs)
1
2
3
4
5
6
2
3
4
5
6
# logE
/**
* 调用android的Log.e
* @param {string} tag tag
* @param {...*} msgs 信息
*/
logE(tag, ...msgs)
1
2
3
4
5
6
2
3
4
5
6
# appendNetTraceHeaders
/**
* 为全局网络调用追加用于帮助服务器进行请求跟踪的头信息
* 再次设置的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
# addGlobalJsExceptionAck
/**
* 开启全局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
# toggleViewVisible
/**
* 调整Js绘制层的显隐,常用于检查有声音没图像时,视频窗口是否是被jsview盖住的
*
* @param toVisible bool类型, true: 显示, false: 隐藏
*/
toggleViewVisible(toVisible)
1
2
3
4
5
6
2
3
4
5
6
# delayRemoveGLView
/**
* 完全释放GLView, 以达到完全清理GL内存的目的,一般配合JsView的visibility的回调一齐使用
* 场景1: 可以通过此接口,规避在android 9.0上把其他进程的GL内存都算在本进程的内存统计上的问题
* 场景2: 完全释放绘制资源,以保证作为Launcher时,退到后时最小化内存
*
* @param delayedTimeSec int类型 延迟关闭View的时间,可以为0, 单位:秒
*/
delayRemoveGLView(delayedTimeSec)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# restoreGLView
/**
* 恢复已经被关闭的GLView,一般在delayRemoveGLView后对GLView进行重新展示
* 此接口内部有状态自查,可以在任何状态调用,既使 delayRemoveGLView 没有触发
*/
restoreGLView()
1
2
3
4
5
2
3
4
5
# getScreenInfo
/**
* 获取显示区域信息(按照designedMapWidth的坐标系),主要用于平板类非16:9屏幕场景下使用
*
* @return {Object} 屏幕信息,子信息如下
* width: designedMapWidth的值
* height: designedMapWidth的比例下,屏幕高度转化过来的高度
*/
getScreenInfo()
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# setDebugUrlAlter
/**
* 设置URL转换器,调试用用接口,讲URL中字符串中的一部分替换成另一部分
* 例如用于将所有经由jsview的URL请求的服务器地址进行更换以实现代理目的
* jsview的URL包含 XMLHttpRequest, 加载js的URL, 图片请求URL。
* 不包含视频和音频URL
*
* @param urlAlterArray object类型,格式{match1: alter1, match2: alter2, ...}, 为{}或者null则为清空
*/
setDebugUrlAlter(urlAlterArray)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9