比如bilibili的window下的player对象,少了很多内置有用函数
window.player
1. i {play: ƒ, pause: ƒ, reload: ƒ, seek: ƒ, volume: ƒ, …}
1. addEventListener: ƒ (i,e)
2. addViewPoints: ƒ (i)
3. appendToPlaylist: ƒ (i)
4. biliMessage: ƒ (i)
5. destroy: ƒ (i)
6. directiveDispatcher: ƒ (i)
7. exitFullScreen: ƒ ()
8. getBufferRate: ƒ ()
9. getCurrentTime: ƒ ()
10. getDuration: ƒ ()
11. getHeight: ƒ ()
12. getMediaInfo: ƒ ()
13. getPlayerState: ƒ ()
14. getPlaylist: ƒ ()
15. getPlaylistIndex: ƒ ()
16. getPlayurl: ƒ ()
17. getSession: ƒ ()
18. getState: ƒ ()
19. getStatisticsInfo: ƒ ()
20. getVersion: ƒ ()
21. getVideoMessage: ƒ ()
22. getWidth: ƒ ()
23. isFullScreen: ƒ ()
24. isMute: ƒ ()
25. loadLab: ƒ (i,e)
26. logger: ƒ (i)
27. mock: ƒ (i)
28. mode: ƒ (i)
29. next: ƒ (i,e,t)
30. noAuxiliary: ƒ ()
31. ogvUpdate: ƒ (i,e)
32. option: ƒ (i,e)
33. pause: ƒ ()
34. play: ƒ ()
35. premiereToast: ƒ (i)
36. prev: ƒ ()
37. reload: ƒ (i)
38. reloadAccess: ƒ (i)
39. removeEventListener: ƒ (i,e)
40. removeFromPlaylist: ƒ (i,e)
41. screenshot: ƒ (i)
42. seek: ƒ (i,e)
43. setMaskFps: ƒ (i)
44. setMute: ƒ ()
45. setPlayerState: ƒ (i,e)
46. setPlaylistIndex: ƒ (i,e)
47. stop: ƒ ()
48. switchSubtitle: ƒ (i)
49. track: ƒ (i,e)
50. updateGuideAttention: ƒ (i)
51. updatePageList: ƒ ()
52. updateSubtitle: ƒ (i)
53. verticalDanmaku: ƒ (i)
54. volume: ƒ (i)
55. \_\_proto\_\_: Object
但是在私有的jsc-player.5b5d1dc6.js第28098行下断点拦截到的player对象
this.player
i {prefix: "bilibili-player", video: video, videoContinueCompareTime: 1593089374034, userLoadedCallbacks: Array(24), initialized: true, …}
$body: init [body, context: body]
$iframe: init {}
$parent: init [div#bofqi, prevObject: init(1), context: body, selector: "#bofqi"]
$window: init [Window]
abtid: undefined
advDanmaku: i {advSetting: {…}, player: i, config: {…}, container: init(1), advDanmaku: i}
allPlugins: i {audioTrack: {…}, player: i}
allowFlv: true
bVideo: i {player: i, pageEvent: Window}
backupURLIndex: 0
basDanmaku: i {paused: true, sTime: 0, dmList: Array(0), cdmList: Array(0), dmIndex: 0, …}
baspanel: i {player: i, danmaku: i}
block: i {block: {…}, player: i, config: {…}, typeEnum: {…}, blockType: {…}}
buvid: "2A79FB2D-DC60-4E95-8F12-D1A4052A8E8F155813infoc"
cdnTimeStart: 1593089373617
config: {…}
container: init [div#bilibiliPlayer.bilibili-player.relative.bilibili-player-no-cursor, context: div#bilibiliPlayer.bilibili-player.relative.bilibili-player-no-cursor]
controller: i {currentRatioClass: "video-size-default", hintClickRemoved: false, bufferRanges: Array(1), TPL: "", lagLastSeekTime: -1, …}
corePreload: {session: "1a3aa5d1cc57183653b190b8799809a0", typedInfo: {…}, defQuality: 0, eventQueues: Array(5), reportQueues: Array(2), …}
corePreloadUsed: true
createdTime: 1593089374031
currentReceivedAudioIndex: (5) ["0-30216", "1-30280", "2-30280", "3-30280", "4-30280"]
currentReceivedVideoIndex: (4) ["0-64", "1-64", "2-64", "3-64"]
currentStreamType: "https"
danmaku: i {destoryed: false, showSubTitle: false, hotkeyPanelInited: false, allDmLoaded: false, player: i, …}
danmakuSetting: i {initalized: true, rendered: true, dropFrames: 0, dropFramesTime: 600, isSyncBlocked: false, …}
dashEventHandler: i {player: i, onDashHttpRequestEnded: ƒ, onDashHttpHeaderReceived: ƒ, onDashAudioFrameDecoded: ƒ, onDashVideoFrameDecoded: ƒ, …}
dashPlayer: e {config: {…}, state: {…}, timer: {…}, events: {…}, components: {…}, …}
destroyed: false
directiveManager: e {_events: {…}, _eventsCount: 38, _maxListeners: undefined, player: i, id: 5, …}
documentElement: html
endingpanel: null
endingpanelInitialized: false
errorHandler: i {backupURLIndex: 0, errorRetry: 5, retryCount: 0, retryTimer: 0, retrySecond: 2000, …}
errorPlayurl: false
eventLog: i {player: i, eventLog: i}
extraParams: null
feedbackTooltip: i {options: {…}, status: 0, prefix: "player-tooltips", triggerClass: "player-tooltips-trigger"}
firstAudioFrameReported: true
firstErrorEvent: false
firstVideoFrameReported: true
flag1: true
flvEventHandler: i {player: i}
forceReportSymbol: false
globalFunction: i {videoInfoCallback: Array(0), player: i, WINDOW_AGENT: {…}, videoInfo: {…}, videoInfoXHR: null}
iframe: null
initStart: 631.3950000003388
initialized: true
initializing: true
isSupportWebGL: true
lastPauseTime: 0
laterLoadTemplateTimer: 0
loadingpanel: i {container: init(1), player: i, prefix: "bilibili-player", stages: Array(4), contentbox: init(1)}
mediaDataSource: {type: "dash", duration: 5106000, url: {…}}
mock: i {mockFunctions: {…}}
multipleDanmakuDebug: {cid: 170413892, playurl: "https://upos-sz-mirrorcos.bilivideo.com/upgcxcode/…,platform&mid=489088672&orderid=0,2&logo=80000000", bvid: "BV1Ac411h793"}
p2pLoadInfo: {cdn: 2394744, p2p: 205500, url: "https://upos-sz-mirrorks3.bilivideo.com/upgcxcode/…erid=0,2&logo=80000000&xyip=106.111.16.205&xyct=8"}
partmanager: i {isPugv: false, parts: Array(12), partsInfo: Array(12), loadPartsCallback: Array(1), player: i, …}
pid: 1593089374032781
playlistLimit: false
popup: i {inited: true, ele: {…}, options: {…}, player: i, paused: true, …}
prefix: "bilibili-player"
premiereSyncTimer: 0
quicklogin: i {requireList: Array(0), windowFakeStatus: false, player: i}
rangePlay: {isEnable: false}
realTimeDanmaku: i {player: i, mode: 1, broadcast: i}
reloadMedia: i {player: i}
repeatReceivedAudioIndex: []
repeatReceivedVideoIndex: []
reportParamMaps: {}
segmentLoadInfo: {upos-sz-mirrorks3.bilivideo.com: {…}, upos-sz-mirrorcos.bilivideo.com: {…}}
segmentSizeMaps: {}
send: i {dmAllNum: 63, upImgUrl: "", player: i, prefix: "bilibili-player", container: init(1), …}
session: "1a3aa5d1cc57183653b190b8799809a0"
setting: {config: {…}, init: ƒ, getItem: ƒ}
settingPanel: i {initalized: false, player: i, setting: {…}, settingItem: {…}, config: {…}}
sourceSwitching: false
state: {video_state: 4, repeat: false, danmaku: true, mode: 0, play_type: 2, …}
subtitle: i {visibleStatus: true, data: {…}, inited: true, options: {…}, player: i, …}
syncEnable: true
template: i {firstScreen: true, ctrlShowTimes: 0, mouseInController: false, player: i, prefix: "bilibili-player", …}
timerChecker: null
timerVideoStatus: 36
toast: i {timeout: 5000, timerInfo: {…}, topTimeoutIndex: 0, restTime: null, restTimeShow: true, …}
totalReceivedBytes: (9) [301118, 908, 526954, 205505, 206374, 1019466, 963403, 205501, 205500]
track: i {enableHeartBeat: true, playerStatue: Array(5), seek: {…}, pipSeek: {…}, pipEventDetails: {…}, …}
user: i {player: i, playerNumber: {…}, userStatus: {…}, retry: 3, initialized: true, …}
userLoadedCallbacks: (24) [ƒ, ƒ, ƒ, ƒ, ƒ, ƒ, ƒ, ƒ, ƒ, ƒ, ƒ, ƒ, ƒ, ƒ, ƒ, ƒ, ƒ, ƒ, ƒ, ƒ, ƒ, ƒ, ƒ, ƒ]
utils: ƒ i()
video: video
videoContinueCompareTime: 1593089374034
videoContinueCurrentTime: 0
videoContinueTime: 0
videoData: {acceptQuality: Array(4), videoQuality: 0, bp: undefined, hasPaid: undefined, isPreview: undefined}
videoDisableTime: 0
videoInfo: i {rendered: false, player: i, config: {…}, container: init(1), initialized: true, …}
videoQuality: 0
videoRealQuality: 64
videoSettings: {setting_config: {…}, video_status: {…}, block: {…}, message: {…}, subtitle: {…}, …}
videoTop: i {btnText: "关注", container: init(1), player: i, prefix: "bilibili-player", pgcType: 0, …}
window: Window {parent: Window, opener: Window, top: Window, length: 1, frames: Window, …}
__proto__: Object
那么如何导出这个this对象使其可以在外部js里调用呢?