• 网易云音乐单曲循环,单曲播放完后会重新加载/下载音乐,希望能不重新加载。
  • DOM较源逻辑稳定,需要找到对应的DOM元素以控制,不便直接覆写源逻辑
  • 进度元素

全文搜索"j-flag time",只找到一个出处

audiotrack 循环播放shortbuffer 播放器单曲循环_加载


开启正则,全文搜索"\btime\b"(\b为分隔符,避免找到timeout等)

audiotrack 循环播放shortbuffer 播放器单曲循环_全文搜索_02

(仅展示部分结果)

图上第一个文件是是样式表,第二个是页面模板?

audiotrack 循环播放shortbuffer 播放器单曲循环_进度条_03


逐一查看搜索结果,找到设置time(赋值)操作,打断点,并播放(运行)、在进度条上指定新位置以查看运行时值,代码与前端界面对应。

audiotrack 循环播放shortbuffer 播放器单曲循环_加载_04

 

audiotrack 循环播放shortbuffer 播放器单曲循环_全文搜索_05


尝试中断后在控制台直接设置值无果(不影响进度)

audiotrack 循环播放shortbuffer 播放器单曲循环_加载_06

,在相应的线程检查调用栈

audiotrack 循环播放shortbuffer 播放器单曲循环_全文搜索_07

audiotrack 循环播放shortbuffer 播放器单曲循环_进度条_08

尝试在控制台设置.radio生效(控制播放进度)

audiotrack 循环播放shortbuffer 播放器单曲循环_加载_09

全局搜索onslidestop,发现传入的形参d8f,是外部两处(图1134、1143行)构造的实参(Hj8b)

audiotrack 循环播放shortbuffer 播放器单曲循环_进度条_10

audiotrack 循环播放shortbuffer 播放器单曲循环_加载_11


继续向上。

  • 以上1134在测试中未被触发,1143所在的1139是点击进度条事件触发,其中d8f是点击事件(另见后文)
  • 查找对(Hj8b)的赋值操作,播放时进度在此函数(yl6f.WP5U)被更新

    继续向上。
  • 查找方法(yl6f.WP5U)的调用,无果

查找(WP5U),有(this.WP5U)形式的调用4处。(则(yl6f)是this?或this的父类?)

audiotrack 循环播放shortbuffer 播放器单曲循环_进度条_12

 

  • 手动点击播放进度条,找到来自DOM元素触发的事件(d8f)响应。注意触发元素是currentTarget(而非path[0])
    准备尝试模拟点击。

    audiotrack 循环播放shortbuffer 播放器单曲循环_加载_13

    audiotrack 循环播放shortbuffer 播放器单曲循环_加载_14

    audiotrack 循环播放shortbuffer 播放器单曲循环_进度条_15

    以上auto-id是变化的,需要用class来查找,document.getElementsByClassName("barbg j-flag")[0]。
  •  JS如何模拟鼠标点击X,Y坐标js 模拟鼠标点击构造点击事件。
    对元素使用getBoundingClientRect获取客户区坐标(经测试,无需屏幕坐标)
    对照d8f在initMouseEvent构造事件。
  • audiotrack 循环播放shortbuffer 播放器单曲循环_进度条_16

  • 参见:JavaScript获取DOM元素位置和尺寸大小\视口坐标(getBoundingClientRect)。
  • 播放结束重新播放,(从DOM中)找触发
  • audiotrack 循环播放shortbuffer 播放器单曲循环_全文搜索_17

    audiotrack 循环播放shortbuffer 播放器单曲循环_进度条_18

  • 栈中向上在栈顶!找到onMediaCallBack。函数名没有被简化/混淆,且定义无let/var限定,说明是DOM全局的?
  • audiotrack 循环播放shortbuffer 播放器单曲循环_加载_19

  •  但并未在事件侦听器断点中找到它。不过测试中发现了此事件侦听器断点可以捕获各种事件。
  • audiotrack 循环播放shortbuffer 播放器单曲循环_进度条_20

  • 且事件的响应都是此onMediaCallBack。
    经测试,播放结束后会先后触发pause-ended事件。
  • audiotrack 循环播放shortbuffer 播放器单曲循环_进度条_21

  • 但在油猴里document.onMediaCallBack(this/Window亦不存在)为undefine。
    HTML Audio/Video DOM timeupdate 事件,play()方法timeupdate: H5 DOM中ontimeupdate是独立的事件。
    找事件的源元素
  • audiotrack 循环播放shortbuffer 播放器单曲循环_加载_22

  • 找不到此id,也找不到此类..在“元素”面板中显示得到在当前页面中找不到节点。(Node cannot be found in the current page.)
  • audiotrack 循环播放shortbuffer 播放器单曲循环_进度条_23

  • 搜索audio,在swf中
  • audiotrack 循环播放shortbuffer 播放器单曲循环_进度条_24

  •  
    无法找到元素..则无法绑定事件?(此事件又不支持冒泡传递)
  • 尝试中
  • 对以上d8f\srcElement,虽然没找到元素(节点),但其outerHTML包含了文件地址路径..
    <audio id="auto-id-XXX" src="https://m701.music.126.net/XX/YY/ZZ.m4a"></audio>
    可以直接播放
  • 可以给d8f(audio类)设置ontimeupdate等方法,会被触发响应。
  • audio完全是个孤立的元素,貌似建立,绑定完事件响应后就移除了?变成upvalue了?只能在过程初期中去拦截了?

this即此.audio#auto-id-xxx。

  • 此onMediaCallBack是顶层栈。

实际设置的点击位置直接取所有(窗口、客户区)X=-1000,因为貌似受窗口缩放压缩的影响,可能实际点击的位置也偏移很多。
貌似在时间进度条上点击鼠标,其坐标也会受影响?

  • 使用document.getElementsByClassName("icn icn-one")判断当前是否为单曲循环模式。
  • 全文搜索的结果看着仅2行,但实际匹配项的数量可能不止,可能是由于同行中有多个
  • 函数是处定义(不算重构覆盖的话),处调用;变量类似的。
  • 可以顺带展开字段duration。
  • 学习、练习。onended事件-三体教程 (santii.com)含在线测试。经测试,可以把audio标签放到body外面。但是再深(如放到div内)又不行了,audio内的子元素/标签无法正常工作了。
  • DOM 对象动作事件鼠标/键盘/对象/表单/剪贴板/打印/拖动/多媒体/动画/过渡/其他
  • 貌似出现多次加载,且内容不同
    还好var变量共享(彼此可以识别)->关于是否一致、是否同一个对象,另见hashcode & System.identityHashCode。


    刚开始,页面会删除很多东西,可疑.. 

audiotrack 循环播放shortbuffer 播放器单曲循环_加载_25