您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
可访问性优化
当前为
// ==UserScript== // @name accessibility_盲网快捷键 // @namespace https://www.zhihu.com/people/yin-xiao-bo-11 // @require https://greasyfork.org/scripts/375077-handlekey/code/handleKey.js?version=649955 // @version 0.1.5.1 // @description 可访问性优化 // @author Veg // @include http://www.zd.hk/* // @include http://apk.qt06.com/* // @include http://*.amhl.net/* // @include http://*tingyouwang.com/* // @include http://bbs.amtkjy.com/* // @grant none // ==/UserScript== "use strict"; var host = window.location.host; //包含页面所有元素的数组 let zdElement = []; let zdFES; function zdHotKey(k) { if (!k.altKey) { return false; } else { //获取页面所有元素,push 给 zdElement 数组 zdElement.length = 0; var all = document.all; for (var i = 0, l = all.length; i < l; i++) { if (all[i].nodeType == 1) { zdElement.push(all[i]); } } //获取焦点元素的数组下标 zdFES = zdGetSubscript(zdElement, document.activeElement); if (host === 'www.zd.hk') { //页面包含指定元素才执行快捷键函数 var subject = document.querySelector('a.subject_link'); if (subject !== null) { subjectHotKey(k); } var message = document.querySelector('div.message') if (message !== null) { floorHotKey(k); } } if (host === 'bbs.amhl.net' || host === 'www.amhl.net' || host === 'apk.qt06.com' || host === 'tingyouwang.com' || host === 'www.tingyouwang.com' || host === 'bbs.amtkjy.com') { accesskey(k); } } } document.addEventListener('keydown', function (k) { zdHotKey(k); if (host === 'www.zd.hk') { player(k); } }, null); //获取数组下标的函数 function zdGetSubscript(arrays, obj) { var i = arrays.length; while (i--) { if (arrays[i] === obj) { return i; } } return false; } function subjectHotKey(k) { let subscriptArray = []; var target = zdElement.filter(function (t) { if ((t.classList.contains('subject_link') || t.innerText == '下一页' || t.innerText == '上一页') && t.tagName == 'A') { if (t.hasAttribute('accesskey')) { t.removeAttribute('accesskey', '*'); } subscriptArray.push(zdGetSubscript(zdElement, t)); return t; } }); if (k.shiftKey && k.altKey && k.keyCode == 88) { previousTarget(target, subscriptArray); } if (k.shiftKey) return false; if (k.altKey && k.keyCode == 88) { nextTarget(target, subscriptArray) } } //楼层 function floorHotKey(k) { let subscriptArray = []; var target = zdElement.filter(function (t) { if (t.getAttribute('tabindex') == '-1' && t.tagName == 'DIV' && !t.hasAttribute('role') || (t.innerText == '下一页' || t.innerText == '上一页') && t.tagName == 'A' && !t.hasAttribute('role')) { if (t.offsetParent !== null) { if (t.getAttribute('aria-label') == null) { t.setAttribute('aria-label', t.parentNode.innerText); if (t.hasAttribute('accesskey')) { t.removeAttribute('accesskey', '*'); } } if (t.innerText == '上一页' && t.tagName == 'A') { t.classList.add('zd-page-up'); } if (t.innerText == '下一页' && t.tagName == 'A') { t.classList.add('zd-page-down'); } subscriptArray.push(zdGetSubscript(zdElement, t)); return t; } } }); if (document.querySelector('a.zd-page-up') !== null) { document.querySelector('a.zd-page-up').setAttribute('role', 'link'); } if (document.querySelector('a.zd-page-down') !== null) { document.querySelector('a.zd-page-down').setAttribute('role', 'link'); } if (k.shiftKey && k.altKey && k.keyCode == 88) { previousTarget(target, subscriptArray); } if (k.shiftKey) return false; if (k.altKey && k.keyCode == 88) { nextTarget(target, subscriptArray) } } function previousTarget(target, subscriptArray) { for (var i = 0, l = target.length || subscriptArray.length; i < l; i++) { if (zdFES > subscriptArray[l - 1] || zdFES <= subscriptArray[0]) { target[l - 1].focus(); break; } else if (zdFES <= subscriptArray[i]) { var xv = zdGetSubscript(target, target[i]); target[xv - 1].focus(); break; } } return false; } function nextTarget(target, subscriptArray) { for (var i = 0, l = target.length || subscriptArray.length; i < l; i++) { if (zdFES < subscriptArray[i]) { var xv = zdGetSubscript(target, target[i]); target[xv].focus(); break; } else if (zdFES < subscriptArray[0] || zdFES >= subscriptArray[l - 1]) { target[0].focus(); break; } } return false; } function accesskey(k) { let Xscript = []; var xAcc = handleKey('x', 'accesskey-x', Xscript); let Zscript = []; var zAcc = handleKey('z', 'accesskey-z', Zscript); if (k.shiftKey && k.altKey && k.keyCode == 88) { previousTarget(xAcc, Xscript); } if (k.shiftKey && k.altKey && k.keyCode == 90) { previousTarget(zAcc, Zscript); } if (k.shiftKey) return false; if (k.altKey && k.keyCode == 88) { nextTarget(xAcc, Xscript) } if (k.altKey && k.keyCode == 90) { nextTarget(zAcc, Zscript) } } function player(k) { var audios = document.querySelector('div.plyr--playing'); if (audios !== null) { var audio = audios.querySelector('audio'); if (audio !== null) { if (k.shiftKey && k.keyCode == 32) { if (audio.paused !== true) { audio.pause(); } else if (audio.play !== true) { audio.play(); } } var volume = audio.volume; if (k.shiftKey && k.keyCode == 38) { audio.volume = volume + 0.05; } if (k.shiftKey && k.keyCode == 40) { audio.volume = volume - 0.05; } if (k.shiftKey && k.keyCode == 37) { audio.currentTime -= 10; } if (k.shiftKey && k.keyCode == 39) { audio.currentTime += 10; } if (k.shiftKey && k.keyCode == 34) { audio.currentTime = 0; audio.play(); } if (k.shiftKey && k.keyCode == 33) { if (audio.muted == true) { audio.muted = false; } else { audio.muted = true; } } } } }