您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
一个很普通的脚本
// ==UserScript== // @name bilibili 小助手 // @namespace https://greasyfork.org/zh-TW/users/725704 // @version 1.2.4 // @description 一个很普通的脚本 // @author quiet // @match *://www.bilibili.com/bangumi/play/* // @match *://www.bilibili.com/video/* // @grant GM_setValue // @grant GM_getValue // @grant GM_deleteValue // @require https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js // ==/UserScript== var $ = window.jQuery; var div; var divList; var video; var checkvideo; if (GM_getValue('skipOpKey') == '' || GM_getValue('skipOpKey') === undefined) { GM_setValue('skipOpKey', 'K'); }; if (GM_getValue('forwardSkipTime') == '' || GM_getValue('forwardSkipTime') === undefined) { GM_setValue('forwardSkipTime', '1'); }; if (GM_getValue('forwardSkipTimeKey') == '' || GM_getValue('forwardSkipTimeKey') === undefined) { GM_setValue('forwardSkipTimeKey', 'L'); }; if (GM_getValue('backwardSkipTime') == '' || GM_getValue('backwardSkipTime') === undefined) { GM_setValue('backwardSkipTime', '1'); }; if (GM_getValue('backwardSkipTimeKey') == '' || GM_getValue('backwardSkipTimeKey') === undefined) { GM_setValue('backwardSkipTimeKey', 'J'); }; if (GM_getValue('autoDisableSpecial') == '' || GM_getValue('autoDisableSpecial') === undefined) { GM_setValue('autoDisableSpecial', 'checked'); }; if (GM_getValue('autoDisSpcInput') == '' || GM_getValue('autoDisSpcInput') === undefined) { GM_setValue('autoDisSpcInput', '150') }; (function() { div = document.createElement('div'); div.style.position = 'absolute'; div.style.left = '20px'; div.style.top = '150px'; div.style.width = '170px'; div.style.height = '25px'; div.style.fontSize = '15px'; div.style.background = '#F4F4F4'; div.innerHTML = `<div style="display:inline;">小助手</div> <div class="openCloseButton" style="display:inline; float:right; cursor:pointer;">收起</div> <div class="openCloseList" style="border-style:groove; height:290px;"> <hr> <br> <div class="loadVideoStat">正在加载播放器。。</div> <button id="skipOpButton" class="ElementsInList" style="border-style:groove; display:none; float:left;cursor:pointer;">跳过</button> <div class="ElementsInList" style="display:none;">番剧op(1:30):</div> <input id="skipOpKey" class="ElementsInList" autocomplete="off" style="border-style:groove; display:none; width:12px; height:12px;" value="${GM_getValue('skipOpKey')}"> <div id="skipOptext" class="ElementsInList" style="display:none;">键</div> <br> <br> <button id="forwardSkipTimeButton" class="ElementsInList" style="border-style:groove; display:none; float:left; cursor:pointer;">前进</button> <input id="forwardSkipTime" class="ElementsInList" autocomplete="off" style="border-style:groove; display:none; width:25px; height:20px;" value="${GM_getValue('forwardSkipTime')}"> <div class="ElementsInList" style="display:none;" maxlength="3">秒:</div> <input id="forwardSkipTimeKey" class="ElementsInList" autocomplete="off" style="border-style:groove; display:none; width:12px; height:12px;" value="${GM_getValue('forwardSkipTimeKey')}"> <div class="ElementsInList" style="display:none;">键</div> <br> <br> <button id="backwardSkipTimeButton" class="ElementsInList" style="border-style:groove; display:none; float:left; cursor:pointer;">后退</button> <input id="backwardSkipTime" class="ElementsInList" autocomplete="off" style="border-style:groove; display:none; width:25px; height:20px;" value="${GM_getValue('backwardSkipTime')}"> <div class="ElementsInList" style="display:none;" maxlength="3">秒:</div> <input id="backwardSkipTimeKey" class="ElementsInList" autocomplete="off" style="border-style:groove; display:none; width:12px; height:12px;" value="${GM_getValue('backwardSkipTimeKey')}"> <div class="ElementsInList" style="display:none;">键</div> <br> <br> <button id="videoSpeed3x" class="ElementsInList" style="border-style:groove; display:none; float:left; cursor:pointer;">3.0x</button> <button id="videoSpeed025x" class="ElementsInList" style="border-style:groove; display:none; cursor:pointer;">0.25x</button> <br> <div class="ElementsInList" style="display:none;">倍速后可能无法显示弹幕</div> <br> <br> <input id="autoDisSpcCB" class="ElementsInList" style="-webkit-appearance:checkbox; display:none; float:left; cursor:pointer; width:15px; height:15px;" type="checkbox" ${GM_getValue('autoDisableSpecial')}> <div class="ElementsInList" style="display:none;">高级弹幕多於</div> <input id="autoDisSpcInput" class="ElementsInList" autocomplete="off" style="border-style:groove; display:none; width:35px; height:20px;" value="${GM_getValue('autoDisSpcInput')}"> <div class="ElementsInList" style="display:none;">时</div> <br> <div class="ElementsInList" style="display:none;">自动屏蔽高级弹幕</div> </div>`; try{ document.body.appendChild(div); } catch(e) {console.log('[小助手]错误: ' + e);} divList = document.getElementsByClassName('openCloseList')[0]; divList.style.background = '#F4F4F4'; var btn = document.getElementsByClassName('openCloseButton')[0]; if (GM_getValue('closeList') === true) { $(divList).hide(); btn.textContent = '展开'; }; btn.addEventListener('click', function(e) { if (btn.textContent === '收起') { GM_setValue('closeList', true); $(divList).slideUp(); btn.textContent = '展开'; return; }; if (btn.textContent === '展开') { GM_setValue('closeList', false); $(divList).slideDown(); btn.textContent = '收起'; return; }; }); checkvideo = setInterval(() => { video = document.getElementsByTagName('video')[0]; if (video != null) { $('.loadVideoStat').hide(); var eil = document.getElementsByClassName('ElementsInList'); var i; for (i = 0; i < eil.length; i++) { eil[i].style.display = 'inline'; } clearInterval(checkvideo); EventList(); check(); }; }, 1000); })(); function EventList() { var skipOpBtn = document.getElementById('skipOpButton'); var inputBox = document.getElementById('skipOpKey'); var FSTimeBtn = document.getElementById('forwardSkipTimeButton'); var FSTimeInput = document.getElementById('forwardSkipTime'); var FSTimeKeyInput = document.getElementById('forwardSkipTimeKey'); var BSTimeBtn = document.getElementById('backwardSkipTimeButton'); var BSTimeInput = document.getElementById('backwardSkipTime'); var BSTimeKeyInput = document.getElementById('backwardSkipTimeKey'); var SpeedFastBtn = document.getElementById('videoSpeed3x'); var SpeedSlowBtn = document.getElementById('videoSpeed025x'); var autoDisSpcCB = document.getElementById('autoDisSpcCB'); var autoDisSpcInput = document.getElementById('autoDisSpcInput'); var lastInputBox = inputBox.value; var lastFSTimeInput = FSTimeInput.value; var lastFSTimeKeyInput = FSTimeKeyInput.value; var lastBSTimeInput = BSTimeInput.value; var lastBSTimeKeyInput = BSTimeKeyInput.value; var lastautoDisSpcInput = autoDisSpcInput.value; skipOpBtn.onclick = () => { video.currentTime = video.currentTime + 90; }; document.addEventListener('keydown', (event) => { if (event.key.toLowerCase() == inputBox.value.toLowerCase()) { video.currentTime = video.currentTime + 90; }; if (event.key.toLowerCase() == FSTimeKeyInput.value.toLowerCase()) { video.currentTime = video.currentTime + parseInt(FSTimeInput.value); }; if (event.key.toLowerCase() == BSTimeKeyInput.value.toLowerCase()) { video.currentTime = video.currentTime - parseInt(BSTimeInput.value); }; }); inputBox.addEventListener('input', (e) => { if (inputBox.value == '' || e.data.toUpperCase() == FSTimeKeyInput.value || e.data.toUpperCase() == BSTimeKeyInput.value) { inputBox.value = lastInputBox; } else { inputBox.value = e.data.toUpperCase(); if (e.data == null ||e.data == " ") { GM_setValue('skipOpKey', 'K'); inputBox.value = 'K'; }; GM_setValue('skipOpKey', inputBox.value); }; lastInputBox = inputBox.value; }); FSTimeBtn.onclick = () => { video.currentTime = video.currentTime + parseInt(FSTimeInput.value); }; FSTimeInput.addEventListener('input', (e) => { if (isNaN(parseInt(FSTimeInput.value))|| (parseInt(FSTimeInput.value)) < 1 || ''+FSTimeInput.value != parseInt(FSTimeInput.value)) { FSTimeInput.value = '1'; }; if (FSTimeInput.value.length > 3) {FSTimeInput.value = lastFSTimeInput}; GM_setValue('forwardSkipTime', FSTimeInput.value); lastFSTimeInput = FSTimeInput.value; }); FSTimeKeyInput.addEventListener('input', (e) => { if (FSTimeKeyInput.value == '' || e.data.toUpperCase() == inputBox.value || e.data.toUpperCase() == BSTimeKeyInput.value) { FSTimeKeyInput.value = lastFSTimeKeyInput; } else { FSTimeKeyInput.value = e.data.toUpperCase(); if (e.data == null ||e.data == " ") { GM_setValue('forwardSkipTimeKey', 'L'); FSTimeKeyInput.value = 'L'; }; GM_setValue('forwardSkipTimeKey', FSTimeKeyInput.value); }; lastFSTimeKeyInput = FSTimeKeyInput.value; }); BSTimeBtn.onclick = () => { video.currentTime = video.currentTime - parseInt(BSTimeInput.value); }; BSTimeInput.addEventListener('input', (e) => { if (isNaN(parseInt(BSTimeInput.value))|| (parseInt(BSTimeInput.value)) < 1 || ''+BSTimeInput.value != parseInt(BSTimeInput.value)) { BSTimeInput.value = '1'; }; if (BSTimeInput.value.length > 3) {BSTimeInput.value = lastBSTimeInput}; GM_setValue('backwardSkipTime', BSTimeInput.value); lastBSTimeInput = BSTimeInput.value; }); BSTimeKeyInput.addEventListener('input', (e) => { if (BSTimeKeyInput.value == '' || e.data.toUpperCase() == inputBox.value || e.data.toUpperCase() == FSTimeKeyInput.value) { BSTimeKeyInput.value = lastBSTimeKeyInput; } else { BSTimeKeyInput.value = e.data.toUpperCase(); if (e.data == null ||e.data == " ") { GM_setValue('backwardSkipTimeKey', 'L'); BSTimeKeyInput.value = 'L'; }; GM_setValue('backwardSkipTimeKey', BSTimeKeyInput.value); }; lastBSTimeKeyInput = BSTimeKeyInput.value; }); SpeedFastBtn.onclick = () => { video.playbackRate = 3.0; video.defaultPlaybackRate = 3.0; }; SpeedSlowBtn.onclick = () => { video.playbackRate = 0.25; video.defaultPlaybackRate = 0.25; }; autoDisSpcCB.addEventListener('change', (e) => { if (e.currentTarget.checked === true) {GM_setValue('autoDisableSpecial', 'checked');}; if (e.currentTarget.checked === false) {GM_setValue('autoDisableSpecial', 'none');}; }); autoDisSpcInput.addEventListener('input', (e) => { if (isNaN(parseInt(autoDisSpcInput.value))|| (parseInt(autoDisSpcInput.value)) < 1 || ''+autoDisSpcInput.value != parseInt(autoDisSpcInput.value)) { autoDisSpcInput.value = '200'; }; if (autoDisSpcInput.value.length > 4) {autoDisSpcInput.value = lastautoDisSpcInput}; GM_setValue('autoDisSpcInput', autoDisSpcInput.value); lastautoDisSpcInput = autoDisSpcInput.value; }); }; function check() { var autoDisSpcAble; var send = true; var checkLoop = setInterval(() => { autoDisSpcAble = GM_getValue('autoDisableSpecial'); if (autoDisSpcAble == 'checked') { var checkDanmaku = setInterval(() => { autoDisSpcAble = GM_getValue('autoDisableSpecial'); if (autoDisSpcAble == 'none') {clearInterval(checkDanmaku);}; var SpcDanmaku = document.getElementsByClassName('bilibili-player-video-adv-danmaku')[0].querySelectorAll('div'); var autoDisSpcNum = GM_getValue('autoDisSpcInput'); if (SpcDanmaku.length >= autoDisSpcNum) { if (autoDisSpcAble != 'none') { $('.bilibili-player-video-adv-danmaku').hide(); var toast = document.getElementsByClassName('bilibili-player-video-toast-top')[0]; if (send) {send = false;toast.innerHTML = `<div class="bilibili-player-video-toast-item">检测到高级弹幕多於${autoDisSpcNum},自动屏蔽中</div>`;setTimeout(() => {toast.innerHTML = '';},3000);}; }; } else {$('.bilibili-player-video-adv-danmaku').show();send = true;}; }, 100); autoDisSpcAble = GM_getValue('autoDisSpcInput'); } else { send = true; $('.bilibili-player-video-adv-danmaku').show() }; }, 500); };