非输入状态下 , 和 . 快速翻到上一页和下一页
// ==UserScript==
// @name 快捷键翻页
// @namespace http://tampermonkey.net/
// @version 0.1.1
// @description 非输入状态下 , 和 . 快速翻到上一页和下一页
// @author You
// @include *://*
// @grant none
// ==/UserScript==
(function() {
'use strict';
// 配置
var __pageTurningOption = {
prev: {
keyCode:188,
text:/^\s*(\<{0,2}|\←?|\《?)\s*(prev(ious)?\s*page|上一[页章节篇])\s*$/i
},
next: {
keyCode:190,
text:/^\s*(next\s*page|下一[页章节篇])\s*(\>{0,2}|\→?|\》?)\s*/i,
// elem:'',
// selector:'',
}
};
// 优先读取页面设置, 其次读取默认设置
setTimeout(function(){
__pageTurningOption = window.__pageTurningOption || __pageTurningOption;
}, 200);
// 按钮事件
window.addEventListener('keydown', function(e) {
var target = e.target;
var nodeName = target.nodeName;
if ( e.keyCode!==__pageTurningOption.prev.keyCode && e.keyCode!==__pageTurningOption.next.keyCode ) return;
if ( nodeName==='INPUT' || nodeName==='TEXTAREA' || !!target.getAttribute('contenteditable') ) return;
// 传入配置
goPage( e.keyCode===__pageTurningOption.next.keyCode );
});
// 翻页逻辑
function goPage(wantGoingNextPage) {
var option = wantGoingNextPage? __pageTurningOption.next: __pageTurningOption.prev;
// 上/下页通用逻辑
if ( option.selector ) {
document.querySelector(option.selector).click()
}
else if ( option.text ) {
var links = document.querySelectorAll(`${option.elem||'a'}`), link;
for (var i=links.length-1; i!==0; i--) {
link = links[i];
if (!option.text.test(link.textContent)) continue;
link.click();
break;
};
}
}
})();