您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Insert 1001tracklists into YouTube player
// ==UserScript== // @name 1001tracklists in YouTube // @namespace https://xcgx.me // @version 0.1 // @description Insert 1001tracklists into YouTube player // @author You // @require http://code.jquery.com/jquery-latest.js // @match https://www.youtube.com/watch?v=* // @grant GM_xmlhttpRequest // ==/UserScript== var tl_switch='<div class="ytp-menuitem" role="menuitemcheckbox" aria-checked="false" tabindex="0" id="tl-menu-checkbox"><div class="ytp-menuitem-label">Enable Tracklist</div><div class="ytp-menuitem-content"><div class="ytp-menuitem-toggle-checkbox"></div></div></div>'; var tracktitle='<span id="tl-title"></span>'; var form='<div id="tl-form"><input id="tl-link" style="width: 80%;"/><button id="tl-button">fetch</button><p id="tl-list"></p></div>'; var title_line='<a class="yt-simple-endpoint style-scope yt-formatted-string" onclick="document.getElementById(\'movie_player\').seekTo({second})">{time_str}</a>{title}'; function timestr_to_int(str){ var l=str.split(':'); var base=1; if (str.indexOf('min')>=0) base=60; var result=0; for (var i=l.length-1;i>=0;i--){ result+=base*parseInt(l[i]); base*=60; } return result; } var $=jQuery; var last_interval; (function() { //'use strict'; // Your code here... var lid=setInterval(function(){ if ($('.title').length==0) return; clearInterval(lid); $('.ytp-panel-menu').append(tl_switch); $('.ytp-time-display').append(tracktitle); $(form).insertBefore('.title'); $('#tl-form').hide(); $('#tl-title').hide(); $('#tl-menu-checkbox').click(function(){ var a=$(this).attr('aria-checked'); if (a=='true'){ $(this).attr('aria-checked','false'); $('#tl-form').hide(); $('#tl-title').hide(); } else if (a=='false'){ $(this).attr('aria-checked','true'); $('#tl-form').show(); $('#tl-title').show(); } }); $('#tl-button').click(function(){ GM_xmlhttpRequest({ method: "GET", url: $('#tl-link').val(), onload: function(response) { //console.log(response.responseText); var el = $( '<div></div>' ); el.html(response.responseText); var tlp=$('tr[id^=tlp]',el); var result=[]; for (var i=0;i<tlp.length;i++){ result.push([$('.cueValueField',tlp[i]).text(),$('.trackFormat',tlp[i]).text(), timestr_to_int($('.cueValueField',tlp[i]).text())]); } function update(bid){ var text=""; for (var i=0;i<result.length;i++){ var t=""; if (bid>=0&&i==bid) t='<b>text</b><br/>'; else t='text<br/>'; t=t.replace("text",title_line.replace('{second}',result[i][2]).replace('{time_str}',result[i][0]).replace('{title}',result[i][1])); text+=t; } $('#tl-list').html(text);//break; } update(); console.log(result); var last_tid=-1; if (last_interval) clearInterval(last_interval); last_interval=setInterval(function(){ var cur=timestr_to_int($('.ytp-time-current').text()); //console.log(cur); var i; for (i=0;i<result.length;i++){ if (!result[i][0]) continue; if (cur<result[i][2]) break; } i--; if (i>=0&&i!=last_tid) { last_tid=i; $('#tl-title').text(result[i][1]); update(i); } },1000); $('#tl-link').removeAttr('disabled'); } } ); $('#tl-link').attr('disabled','disabled'); $(this).text('change'); }); },1000); })(); /* todo: how to show vs type songs */