Arrow Key Keyboard shortcuts for Multiple Sites (next/prev chapter)
当前为
// ==UserScript==
// @name Arrow Keys: Next/Prev Chapter
// @namespace https://greatest.deepsurf.us/users/45933
// @version 0.0.1
// @author Fizzfaldt
// @description Arrow Key Keyboard shortcuts for Multiple Sites (next/prev chapter)
// @run-at document-end
// @grant none
// @noframes
// @nocompat Chrome
// @match *://*.wuxiaworld.co/*
// @match *://*.wuxiaworld.com/*
// @match *://*.fanfiction.net/*
// ==/UserScript==
/* jshint esversion: 6 */
function xPathResultToSingleNode(x, context) {
'use strict';
if (!x) {
alert("NULL xPathResult! " + context);
}
let first = x.iterateNext();
if (!first) {
alert("No xPathResult node! " + context);
return;
}
let second = x.iterateNext();
if (second != null) {
alert("xPathResult had second node! [" + second + " ] " + context);
}
return first;
}
const prev = "prev";
const next = "next";
function getXpaths() {
'use strict';
var xpaths = {
"wuxiaworld.co" : {
prev : '//a[@class="prev" and @href]/@href',
next : '//a[@class="next" and @href]/@href'
},
"wuxiaworld.com" : {
prev : '//li[@class="prev"]/a[contains(@class, "btn-link") and @href]/@href',
next : '//li[@class="next"]/a[contains(@class, "btn-link") and @href]/@href'
}
};
var domain = location.hostname;
while (domain != '') {
if (domain in xpaths) {
return xpaths[domain];
}
// Strip one subdomain and try again
let temp = domain.split('.');
temp.shift();
domain = temp.join('.');
}
return null;
}
var pathsForHost = getXpaths();
function arrows(e) {
'use strict';
var result;
switch (e.keyCode) {
case 37: // Left
result = document.evaluate(pathsForHost[prev], document, null, XPathResult.ANY_TYPE, null);
break;
case 39: // Right
result = document.evaluate(pathsForHost[next], document, null, XPathResult.ANY_TYPE, null);
break;
// case 38: // Up
// case 40: // Down
default:
return;
}
let linkHref = xPathResultToSingleNode(result);
let href = linkHref.value;
location.href=href;
}
if (pathsForHost) {
document.addEventListener('keyup', arrows, false);
}