如何获取同页面内另一个js内的匿名对象

比如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里调用呢?

阅读 2.4k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题