看点小程序API支持情况

文档说明


看点小程序概述

看点小程序适配


发起网络请求

wx.request

发起网络请求,同微信wx.request

上传、下载

wx.uploadFile

将本地资源上传到开发者服务器,同微信wx.uploadFile

wx.downloadFile

下载文件资源到本地,客户端直接发起一个 HTTP GET 请求,返回文件的本地临时路径,同微信wx.downloadFile

WebSocket

wx.connectSocket

创建一个 WebSocket 连接,同微信wx.connectSocket

wx.onSocketOpen

监听WebSocket连接打开事件,同微信wx.onSocketOpen

wx.onSocketError

监听WebSocket错误,同微信wx.onSocketError

wx.sendSocketMessage

通过 WebSocket 连接发送数据,需要先 wx.connectSocket,并在 wx.onSocketOpen 回调之后才能发送,同微信wx.sendSocketMessage

wx.onSocketMessage

监听WebSocket接受到服务器的消息事件。微信wx.onSocketMessage

wx.closeSocket

关闭 WebSocket 连接。微信wx.closeSocket

wx.onSocketClose

监听WebSocket关闭。微信wx.onSocketClose

SocketTask

图片

wx.chooseImage

从本地相册选择图片或使用相机拍照。微信wx.chooseImage

wx.previewImage

预览图片。微信wx.previewImage

wx.getImageInfo

获取图片信息,微信wx.getImageInfo

wx.saveImageToPhotosAlbum

保存图片到系统相册,微信wx.saveImageToPhotosAlbum

wx.compressImage

压缩图片接口,可选压缩质量,微信wx.compressImage

wx.compressImage 【N】

从客户端会话选择文件,微信wx.chooseMessageFile

录音

wx.startRecord

开始录音。微信wx.startRecord

wx.stopRecord

​主动调用停止录音。微信wx.stopRecord

录音管理

wx.getRecorderManager【N】

实时录音 【N】

音频播放控制

建议使用能力更强的 wx.createInnerAudioContext 接口

wx.playVoice【N】

建议使用能力更强的 wx.createInnerAudioContext 接口

wx.pauseVoice【N】

建议使用能力更强的 wx.createInnerAudioContext 接口

wx.stopVoice【N】

建议使用能力更强的 wx.createInnerAudioContext 接口

音乐播放控制【D】

虽然支持了本套API,但是与BackgroundAudioManager共用一个音乐播放器,所以同BackgroundAudioManager播放效果,单个小程序只能有一个后台音乐在播放。

wx.getBackgroundAudioPlayerState

获得音乐相关信息,建议使用能力更强的 wx.BackgroundAudioManager 接口

wx.playBackgroundAudio

播放音乐,参数同微信。与微信不同的是,在微信中,两次参数相同的调用,第二次会使音乐从头开始播放。而QB中则是从上次播放到的位置开始。

wx.pauseBackgroundAudio

同微信,建议使用能力更强的 wx.BackgroundAudioManager 接口

wx.seekBackgroundAudio

同微信,建议使用能力更强的 wx.BackgroundAudioManager 接口

wx.stopBackgroundAudio

同微信,建议使用能力更强的 wx.BackgroundAudioManager 接口

wx.onBackgroundAudioPlay

同微信,建议使用能力更强的 wx.BackgroundAudioManager 接口

wx.onBackgroundAudioPause

同微信,建议使用能力更强的 wx.BackgroundAudioManager 接口

wx.onBackgroundAudioStop

同微信,建议使用能力更强的 wx.BackgroundAudioManager 接口

背景音频播放管理

wx.getBackgroundAudioManager【D】

获取 小程序 内唯一的背景音频管理器 backgroundAudioManager。即单个小程序只可能存在一个背景音乐。
backgroundAudioManager

backgroundAudioManager 对象的属性列表:

属性 类型 说明 只读
src String 音频的数据源,默认为空字符串,当设置了新的 src 时,会自动开始播放 ,目前支持的格式包括但不限于 m4a, aac, mp3, wav
title String 音频标题,在QQ浏览器中有此属性但不会在内置播放器展示给用户,需要小程序自己在界面中展示。
epname String 专辑名,在QQ浏览器中有此属性但不会在内置播放器展示给用户,需要小程序自己在界面中展示。
singer String 歌手名,在QQ浏览器中有此属性但不会在内置播放器展示给用户,需要小程序自己在界面中展示。
coverImgUrl String 封面图url,在QQ浏览器中有此属性但不会在内置播放器展示给用户,需要小程序自己在界面中展示
webUrl String 页面链接,在QQ浏览器中有此属性但不会在内置播放器展示给用户,需要小程序自己在界面中展示。
protocol 无效属性 无效属性
其它 同微信 同微信

backgroundAudioManager 对象的方法列表:同微信,且不存在onPrev,onNext
errCode 不保证与微信完全一致
微信wx.getBackgroundAudioManager

音频组件控制

wx.createAudioContext

微信wx.createAudioContext

wx.createInnerAudioContext【D】

innerAudioContext

innerAudioContext 对象的属性列表:

属性 类型 说明 只读
src String 音频的数据链接,用于直接播放。每个实例只能stop之后才能进行重新设置,否则设置无效
obeyMuteSwitch Boolean 无效 经查微信Android版本也是无效
currentTime Number 当前音频的播放位置(单位:s),只有在当前有合法的 src 时返回,时间不取整,保留小数点后 3 位
其它 同微信 同微信 同微信

innerAudioContext 对象的方法列表:

方法 参数 说明
play/pause/stop 同微信的作用
seek position 跳转到指定位置,单位 s。精确到小数点后 3 位,即支持 ms 级别精确度
destroy 销毁当前实例
onWaiting callback 音频加载中事件(建议在onTimeUpdate里监听音乐是否正在流畅播放)
其它on系列方法 callback 同微信作用,监听一系列事件
off系列方法 同微信作用,取消监听

errCode 不保证与微信完全一致
微信wx.createAudioContext

wx.getAvailableAudioSources【N】

相机

wx.createCameraContext

创建 camera 上下文 CameraContext 对象。微信wx.createCameraContext

CameraContext.onCameraFrame 【N】

获取 Camera 实时帧数据。微信CameraContext.onCameraFrame

CameraContext.startRecord

开始录像。微信CameraContext.startRecord

CameraContext.stopRecord

停止录像。微信CameraContext.stopRecord

CameraContext.takePhoto

拍摄照片。微信CameraContext.takePhoto

CameraFrameListener.start

开始监听帧数据。微信CameraFrameListener.start

CameraFrameListener.stop

停止监听帧数据。微信CameraFrameListener.stop

视频

wx.chooseVideo

同微信,拍摄视频或从手机相册中选视频,返回视频的临时文件路径。微信wx.chooseVideo

wx.saveVideoToPhotosAlbum

保存视频到系统相册,同微信wx.saveVideoToPhotosAlbum

wx.createVideoContext

创建 video 上下文 VideoContext 对象,同微信wx.createVideoContext

VideoContext.exitFullScreen【N】

退出全屏,同微信VideoContext.exitFullScreen

VideoContext.hideStatusBar【N】

隐藏状态栏,仅在iOS全屏下有效,同微信VideoContext.hideStatusBar

VideoContext.pause

暂停视频,同微信VideoContext.pause

VideoContext.play

播放视频,同微信VideoContext.play

VideoContext.playbackRate

设置倍速播放,同微信VideoContext.playbackRate

VideoContext.requestFullScreen 【N】

进入全屏,同微信VideoContext.requestFullScreen

VideoContext.seek

跳转到指定位置,同微信VideoContext.seek

VideoContext.sendDanmu

发送弹幕,同微信VideoContext.sendDanmu

VideoContext.showStatusBar【N】

显示状态栏,仅在iOS全屏下有效,同微信VideoContext.showStatusBar

VideoContext.stop

停止播放,同微信VideoContext.stop

文件

wx.saveFile

保存文件到本地,同微信wx.saveFile

wx.getFileInfo

获取文件信息,同微信wx.getFileInfo

wx.getSavedFileList

获取本地已经保存的文件列表,同微信wx.getSavedFileList

wx.getSavedFileInfo

取本地文件的文件信息。此接口只能用于获取已保存到本地的文件,若需要获取临时文件信息,请使用 wx.getFileInfo 接口。
微信wx.getSavedFileInfo

wx.removeSavedFile

删除本地存储的文件。同微信wx.removeSavedFile

wx.openDocument

新开页面打开文档,支持格式:doc, xls, ppt, pdf, docx, xlsx, pptx,同微信wx.openDocument

FileSystemManager【N】

富文本【N】

数据缓存

wx.setStorage

将数据存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容,这是一个异步接口。同微信wx.setStorage

wx.setStorageSync

将 data 存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容,这是一个同步接口。同微信wx.setStorageSync

wx.getStorage

从本地缓存中异步获取指定 key 对应的内容。同微信wx.getStorage

wx.getStorageSync

从本地缓存中同步获取指定 key 对应的内容。同微信wx.getStorageSync

wx.getStorageInfo

异步获取当前storage的相关信息。同微信wx.getStorageInfo

wx.getStorageInfoSync

同步获取当前storage的相关信息。同微信wx.getStorageInfoSync

wx.removeStorage

从本地缓存中异步移除指定 key。同微信wx.removeStorage

wx.removeStorageSync

从本地缓存中同步移除指定 key。同微信wx.removeStorageSync

wx.clearStorage

清理本地数据缓存。同微信wx.clearStorage

wx.clearStorageSync

同步清理本地数据缓存。同微信wx.clearStorageSync

wx.setBackgroundFetchToken 【N】

设置自定义登录态,在周期性拉取数据时带上,便于第三方服务器验证请求合法性

wx.onBackgroundFetchData 【N】

收到 backgroundFetch 数据时的回调

wx.getBackgroundFetchToken 【N】

获取设置过的自定义登录态。若无,则返回 fail

wx.getBackgroundFetchData 【N】

拉取 backgroundFetch 客户端缓存数据

位置

wx.getLocation

获取位置,同微信wx.getLocation

wx.chooseLocation

获取位置,同微信wx.chooseLocation

wx.openLocation

使用QQ浏览器内置地图查看位置,效果同微信wx.openLocation

wx.createMapContext

创建并返回 map 上下文 mapContext 对象。同微信wx.createMapContext

wx.stopLocationUpdate【N】

关闭监听实时位置变化,前后台都停止消息接收。同微信wx.stopLocationUpdate

wx.startLocationUpdateBackground【N】

开启小程序进入前后台时均接收位置消息,需引导用户开启授权。授权以后,小程序在运行中或进入后台均可接受位置消息变化。同微信wx.startLocationUpdateBackground

wx.startLocationUpdate【N】

开启小程序进入前台时接收位置消息。同微信wx.startLocationUpdate

wx.onLocationChange【N】

监听实时地理位置变化事件,需结合 wx.startLocationUpdateBackground、wx.startLocationUpdate使用。同微信wx.onLocationChange

wx.offLocationChange【N】

取消监听实时地理位置变化事件。同微信wx.offLocationChange

系统信息

wx.getSystemInfo

获取系统信息。同微信wx.getSystemInfo

额外字段:environment,取值有以下三个 (之前运行环境是通过isQB和isOnReading来判断,后面会逐步废弃这两个接口,建议开发者使用environment来判断小程序环境)

QB:标识当前小程序运行在QQ浏览器中

KB:标识当前小程序运行在快报中

Unknown:标识当前小程序的运行环境未知

wx.getSystemInfoSync

获取系统信息同步接口。同微信wx.getSystemInfoSync

wx.canIUse

判断小程序的API,回调,参数,组件等是否在当前版本可用。同微信wx.canIUse

内存

wx.onMemoryWarning【N】

网络状态

wx.getNetworkType

获取网络类型。同微信wx.getNetworkType

wx.onNetworkStatusChange

监听网络状态变化。同微信wx.onNetworkStatusChange

加速度计

wx.onAccelerometerChange

监听加速度数据。同微信wx.onAccelerometerChange

wx.startAccelerometer

开始监听加速度数据。同微信wx.startAccelerometer

wx.stopAccelerometer

停止监听加速度数据。同微信wx.stopAccelerometer

罗盘

wx.onCompassChange

监听罗盘数据。同微信wx.onCompassChange

wx.startCompass

开始监听罗盘数据。同微信wx.startCompass

wx.stopCompass

停止监听罗盘数据。同微信wx.stopCompass

拨打电话

wx.makePhoneCall

微信wx.makePhoneCall

扫码

wx.scanCode

微信wx.scanCode

剪贴板

wx.setClipboardData

设置系统剪贴板的内容。同微信wx.setClipboardData

wx.getClipboardData

获取系统剪贴板内容。同微信wx.getClipboardData

蓝牙【N】

wx.openBluetoothAdapter【N】

wx.closeBluetoothAdapter【N】

wx.getBluetoothAdapterState【N】

wx.onBluetoothAdapterStateChange【N】

wx.startBluetoothDevicesDiscovery【N】

wx.stopBluetoothDevicesDiscovery 【N】

wx.getBluetoothDevices【N】

wx.getConnectedBluetoothDevices【N】

wx.onBluetoothDeviceFound【N】

wx.createBLEConnection【N】

wx.closeBLEConnection【N】

wx.getBLEDeviceServices【N】

wx.readBLECharacteristicValue【N】

wx.writeBLECharacteristicValue【N】

wx.notifyBLECharacteristicValueChange【N】

wx.onBLEConnectionStateChange【N】

wx.onBLECharacteristicValueChange【N】

iBeacon【N】

wx.startBeaconDiscovery【N】

wx.stopBeaconDiscovery 【N】

wx.getBeacons【N】

wx.onBeaconUpdate【N】

wx.onBeaconServiceChange【N】

电量

wx.getBatteryInfoSync

wx.getBatteryInfoSync 的同步版本。同微信wx.getBatteryInfoSync

wx.getBatteryInfo

获取设备电量。同步 API wx.getBatteryInfoSync 在 iOS 上不可用。同微信wx.getBatteryInfo

屏幕亮度

wx.setScreenBrightness

设置屏幕亮度。效果同微信wx.setScreenBrightness

wx.getScreenBrightness

获取屏幕亮度。效果同微信wx.getScreenBrightness

wx.setKeepScreenOn

设置是否保持常亮状态。同微信wx.setKeepScreenOn

用户截屏事件

wx.onUserCaptureScreen【N】

振动

wx.vibrateLong

使手机发生较长时间的振动(400ms),同微信wx.vibrateLong

wx.vibrateShort

使手机发生较短时间的振动(15ms),同微信wx.vibrateShort

手机联系人

wx.addPhoneContact【N】

NFC

wx.getHCEState【N】

wx.startHCE【N】

wx.stopHCE【N】

wx.onHCEMessage【N】

wx.sendHCEMessage【N】

Wi-Fi

wx.startWifi【N】

wx.stopWifi【N】

wx.connectWifi【N】

wx.getWifiList【N】

wx.onGetWifiList【N】

wx.setWifiList【N】

wx.onWifiConnected【N】

wx.getConnectedWifi【N】

交互反馈

wx.showToast

显示消息提示框,注意title不要超过7个汉字,其它同微信wx.showToast

wx.showLoading

显示 loading 提示框, 需主动调用 wx.hideLoading 才能关闭提示框,注意title不要超过7个汉字,其它同微信wx.showLoading

wx.hideToast

隐藏消息提示框

wx.hideLoading

隐藏 loading 提示框

wx.showLoading({
  title: '加载中',
})

setTimeout(function(){
  wx.hideLoading()
},2000)

wx.showModal

显示模态弹窗,同微信wx.showModal

wx.showActionSheet

显示操作菜单,同微信wx.showActionSheet

设置导航条

wx.setNavigationBarTitle

动态设置当前页面的标题,同微信wx.setNavigationBarTitle

wx.showNavigationBarLoading

在当前页面显示导航条加载动画。

wx.hideNavigationBarLoading

隐藏导航条加载动画。

wx.setNavigationBarColor【N】

设置tabBar

wx.setTabBarBadge【N】

wx.removeTabBarBadge【N】

wx.showTabBarRedDot【N】

wx.hideTabBarRedDot【N】

wx.setTabBarStyle【N】

wx.setTabBarItem【N】

wx.showTabBar

显示 tabBar,同微信wx.showTabBar

wx.hideTabBar

隐藏 tabBar,同微信wx.hideTabBar

设置窗口背景

wx.setBackgroundColor【N】

wx.setBackgroundTextStyle【N】

设置置顶信息

wx.setTopBarText【N】

导航

wx.navigateTo

微信wx.navigateTo

wx.redirectTo

微信wx.redirectTo

wx.switchTab

跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面,同微信wx.switchTab

wx.navigateBack

关闭当前页面,返回上一页面或多级页面,同微信wx.navigateBack

wx.reLaunch

关闭所有页面,打开到应用内的某个页面,同微信wx.reLaunch

EventChannel 【N】

页面间事件通信通道,同微信EventChannel

动画

wx.createAnimation

创建一个动画实例animation。调用实例的方法来描述动画,同微信wx.createAnimation

位置

wx.pageScrollTo

将页面滚动到目标位置。同微信wx.pageScrollTo

绘图

该系列接口同微信绘图

intro

coordinates

gradient

reference

color

wx.createCanvasContext

wx.createContext

wx.drawCanvas

wx.canvasToTempFilePath

wx.canvasGetImageData【N】

wx.canvasPutImageData【N】

setFillStyle

setStrokeStyle

setShadow

createLinearGradient

createCircularGradient

addColorStop

setLineWidth

setLineCap

setLineJoin

setLineDash

setMiterLimit

rect

fillRect

strokeRect

clearRect

fill

stroke

beginPath

closePath

moveTo

lineTo

arc

bezierCurveTo

quadraticCurveTo

scale

rotate

translate

clip

setFontSize

fillText

setTextAlign

setTextBaseline

drawImage

setGlobalAlpha

save

restore

draw

getActions

clearActions

measureText【N】

globalCompositeOperation【N】

arcTo【N】

strokeText【N】

lineDashOffset【N】

createPattern【N】

shadowBlur【N】

shadowColor【N】

shadowOffsetX【N】

shadowOffsetY[N]

font【N】

transform【N】

setTransform【N】

下拉刷新

Page.onPullDownRefresh【N】

wx.startPullDownRefresh【N】

wx.stopPullDownRefresh【N】

WXML节点信息API

wx.createSelectorQuery

返回一个SelectorQuery对象实例。同微信wx.createSelectorQuery

selectorQuery.in

将选择器的选取范围更改为自定义组件component内。同微信selectorQuery.in

selectorQuery.select

在当前页面下选择第一个匹配选择器selector的节点,返回一个NodesRef对象实例,可以用于获取节点信息。同微信selectorQuery.select

selectorQuery.selectAll

在当前页面下选择匹配选择器selector的节点,返回一个NodesRef对象实例。 与selectorQuery.select(selector)不同的是,它选择所有匹配选择器的节点。

selectorQuery.selectViewport

选择显示区域,可用于获取显示区域的尺寸、滚动位置等信息,返回一个NodesRef对象实例。

nodesRef.boundingClientRect

添加节点的布局位置的查询请求,相对于显示区域,以像素为单位。其功能类似于DOM的getBoundingClientRect。返回值是nodesRef对应的selectorQuery。

nodesRef.scrollOffset

添加节点的滚动位置查询请求,以像素为单位。节点必须是scroll-view或者viewport。返回值是nodesRef对应的selectorQuery。

nodesRef.fields

获取节点的相关信息,需要获取的字段在fields中指定。返回值是nodesRef对应的selectorQuery。

selectorQuery.exec

执行所有的请求,请求结果按请求次序构成数组,在callback的第一个参数中返回。

WXML节点布局相交状态

wx.createIntersectionObserver【N】

intersectionObserver.relativeTo【N】

intersectionObserver.relativeToViewport【N】

intersectionObserver.observe【N】

intersectionObserver.disconnect【N】

第三方平台

wx.getExtConfig【N】

wx.getExtConfigSync【N】

登录【N】

wx.login【D】

wx.checkSession【D】

QB小程序登录与微信小程序登录不完全一致且登录态不互通,详情见文档QQ浏览器小程序登录适配指引

授权

wx.authorize

提前向用户发起授权请求。同微信wx.authorize

wx.getUserInfo【D】

wx.getUserInfo的返回值

{
    userInfo: 
    {
        nickName: 昵称,
        avatarUrl: 头像,
        gender: 性别,
        Province: 省份,
        city: 城市,
        country: 国家
    }
}

getPhoneNumber【N】

支付

wx.requestPayment【D】

发起支付。
QB小程序的支付和微信小程序不完全一样,QB下支持web支付,包括H5支付和WAP支付。
其中H5支付对应接口为requestPayment,WAP支付对应接口为requestPaymentWap。其中WAP支付已经被微信逐渐放弃,基于安全和适配工作量考虑,不建议使用WAP支付。
详情见文档QQ浏览器小程序适配

接口调用凭证【N】

获取 access_token【N】

模板消息【N】

客服消息【N】

转发

Page.onShareAppMessage

在 Page 中定义 onShareAppMessage 函数,设置该页面的转发信息。

wx.showShareMenu【N】

wx.hideShareMenu【N】

wx.updateShareMenu【N】

wx.getShareInfo【N】

收货地址【N】

wx.chooseAddress【N】

卡券【N】

wx.addCard【N】

wx.openCard【N】

设置

wx.openSetting

调起客户端小程序设置界面,返回用户设置的操作结果。同微信wx.openSetting

wx.getSetting

获取用户的当前设置。同微信wx.getSetting

运动【N】

wx.getWeRunData【N】

打开小程序【N】

wx.navigateToMiniProgram【N】

wx.navigateBackMiniProgram【N】

打开APP

launchApp【D】

QB小程序提供拉起APP能力,但是该能力目前不支持小程序直接通过api调用,需要用户点击小程序右上角菜单中的按钮方可拉起app,具体页面路径通过小程序回调返回。
详情见文档QQ浏览器小程序适配

获取发票抬头【N】

wx.chooseInvoiceTitle【N】

生物认证【N】

wx.checkIsSupportSoterAuthentication【N】

wx.startSoterAuthentication【N】

wx.checkIsSoterEnrolledInDevice【N】

更新【N】

wx.getUpdateManager【N】

多线程【N】

wx.createWorker【N】

监控【N】

wx.reportMonitor【N】

调试接口【N】

wx.setEnableDebug【QB调试版本默认输出vConsolelog】

wx.getRealtimeLogManager【N】

wx-getLogManager

日志【N】

wx.getLogManager【N】

定时器

clearInterval

clearTimeout

setInterval

setTimeout

字体【N】

wx-loadFontFace 【N】

键盘【N】

wx-onKeyboardHeightChange 【N】

wx-hideKeyboard 【N】

wx-getSelectedTextRange 【N】

DNS【N】

wx-stopLocalServiceDiscovery 【N】

wx-startLocalServiceDiscovery 【N】

wx-onLocalServiceResolveFail 【N】

wx-onLocalServiceLost 【N】

wx-onLocalServiceFound 【N】

wx-onLocalServiceDiscoveryStop 【N】

wx-offLocalServiceResolveFail 【N】

wx-offLocalServiceLost 【N】

wx-offLocalServiceFound 【N】

wx-offLocalServiceDiscoveryStop 【N】

UDP【N】

wx-createUDPSocket 【N】

QB自定义接口

wx.qbShare

wx.qbShare 调起QB的分享面板

例子:wx.qbShare({

url:xxx

})

wx.qbSaveImage

wx.qbSaveImage 图片保存

例子:wx.qbSaveImage({

url:xxx

})

wx.qbChooseFile

wx.qbChooseFile QB文件选择器

例子:wx.qbChooseFile({

count:xxx

maxSize:xxx

})

wx.qbGetUniqueIdSync

wx.qbGetUniqueIdSync 获取uid

wx.qbOpenApp

wx.qbOpenApp 打开第三方应用,没有安装则拉新,拉新渠道连接需要联系QB接口人 后台配置

例子:wx.qbOpenApp({

uri:xxx

})

wx.qbLaunchApp

wx.qbLaunchApp 打开第三方应用,没有安装则拉新,拉新渠道连接需要联系QB接口人 后台配置

例子:wx.qbLaunchApp({

appParameter:xxx

})

wx.msLaunchApp

wx.msLaunchApp 同qbLaunch 在其他宿主app只接口通用

例子:wx.msLaunchApp({

uri:xxx

})

wx.msInvokeWebAPI

wx.msInvokeWebAPI 接入qb小程序组件自定义的接口

例子:wx.msInvokeWebAPI({

event:xxx

params:xxx

})

快报自定义接口

wx.isAppInstalled

wx.isAppInstalled 检查APP是否已经安装

其它【N】

微信强相关的API都不支持