// ==UserScript==
// @name Bangumi详情页 监听页面快捷键打开网站【可自行定制】 2020年9月28日
// @namespace waecy
// @version 0.0.3
// @description Bangumi详情页 监听页面快捷键单独/批量打开跳转网页
// @author waecy
// @require https://cdn.staticfile.org/jquery/2.1.4/jquery.min.js
// @include *://bangumi.tv/subject/*
// @include *://bgm.tv/subject/*
// @include *://chii.in/subject/*
// @icon https://lain.bgm.tv/pic/icon/s/000/00/13/1391.jpg?r=1357822756
// @icon64 https://lain.bgm.tv/pic/icon/s/000/00/13/1391.jpg?r=1357822756
// @grant GM_xmlhttpRequest
// @grant GM_setValue
// @run-at document-start
// @license MIT License
// ==/UserScript==
/*
2020年9月28日23:52:05 初测完毕,功能实现
2020年9月29日2:43:01 注释无用代码
*/
$(document).ready(function($) {
// 获取键盘码
function getKeyCode(str) {
// 获取当前字符串
var getKey = str.toLocaleLowerCase();
// 返回结果
var ret = '';
// 键码表
var keyCode = {
key: {
/* 字母和数字键的键码值 */
'a': 65,
'b': 66,
'c': 67,
'd': 68,
'e': 69,
'f': 70,
'g': 71,
'h': 72,
'i': 73,
'j': 74,
'k': 75,
'l': 76,
'm': 77,
'n': 78,
'o': 79,
'p': 80,
'q': 81,
'r': 82,
's': 83,
't': 84,
'u': 85,
'v': 86,
'w': 87,
'x': 88,
'y': 89,
'z': 90,
'0': 48,
'1': 49,
'2': 50,
'3': 51,
'4': 52,
'5': 53,
'6': 54,
'7': 55,
'8': 56,
'9': 57,
/* 数字键盘上的键的键码值 后面加_和主键盘数字键 区分开 */
'0_': 96,
'1_': 97,
'2_': 98,
'3_': 99,
'4_': 100,
'5_': 101,
'6_': 102,
'7_': 103,
'8_': 104,
'9_': 105,
'*': 106,
'+_': 107,
'enter1': 108,
'-': 109,
'.': 110,
'/': 111,
/* 功能键键码值 */
'f1': 112,
'f2': 113,
'f3': 114,
'f4': 115,
'f5': 116,
'f6': 117,
'f7': 118,
'f8': 119,
'f9': 120,
'f10': 121,
'f11': 122,
'f12': 123,
/* 控制键键码值 */
'backspace': 8,
'tab': 9,
'clear': 12,
'enter': 13,
'shift': 16,
'ctrl': 17,
'control': 17,
'alt': 19,
'cape lock': 20,
'esc': 27,
'spacebar': 32,
'page up': 33,
'page down': 34,
'end': 35,
'home': 36,
'left arrow': 37,
'up arrow': 38,
'right arrow': 39,
'down arrow': 40,
'insert': 45,
'delete': 46,
'num lock': 144,
';': 186,
':': 186,
'=': 187,
'+': 187,
'-': 189,
'_': 189,
'.': 190,
'>': 190,
'/': 191,
'?': 191,
'`': 192,
'~': 192,
'[': 219,
'{': 219,
'/': 220,
'|': 220,
']': 221,
'}': 221
}
}
// 循环遍历
for (var i in keyCode['key']) {
// 判断是否有当前key值
if (i == getKey) {
// 返回结果
ret = keyCode['key'][i];
}
}
return ret;
}
// 监听鼠标按下事件
document.onkeydown = function(e) {
/* console.log(
e
);*/
// 获取键盘控制键
var keyCode = e.keyCode || e.which || e.charCode;
// 获取Ctrl键,返回true和false
var ctrlKey = e.ctrlKey || e.metaKey;
// 获取Shift键,返回true和false
var shiftKey = e.shiftKey || e.metaKey;
// 获取Alt键,返回true和false
var altKey = e.altKey || e.metaKey;
/* ========= 判断按下Ctrl + Shift + Alt + 英文字母/数字快捷键 ============*/
if (ctrlKey && shiftKey && altKey && keyCode == getKeyCode('X')) {
toUrl('动漫花园', 0);
console.log('Ctrl + Shift + Alt + X');
} else if (ctrlKey && shiftKey && keyCode == getKeyCode('X')) {
/* ========= 判断按下Ctrl + Shift + 英文字母/数字快捷键 ============*/
toUrl(['动漫花园', 'Nyaa表站'], 1);
console.log('Ctrl + Shift + X');
} else if (ctrlKey && altKey && keyCode == getKeyCode('X')) {
/* ========= 判断按下Ctrl + Alt + 英文字母/数字快捷键 ============*/
console.log('Ctrl + Alt + X');
} else if (shiftKey && altKey && keyCode == getKeyCode('X')) {
/* ========= 判断按下Shift + Alt + 英文字母/数字快捷键 ============*/
console.log('Shift + Alt + X');
} else if (ctrlKey && keyCode == getKeyCode('X')) {
/* ========= 判断按下Ctrl + 英文字母/数字快捷键 ============*/
console.log('Ctrl + X');
} else if (shiftKey && keyCode == getKeyCode('X')) {
/* ========= 判断按下Shift + 英文字母/数字快捷键 ============*/
console.log('Shift + X');
} else if (altKey && keyCode == getKeyCode('X')) {
/* ========= 判断按下Alt + 英文字母/数字快捷键 ============*/
console.log('Alt + X');
} else if (keyCode) {
// 如果是单个键的话
// 判断选择哪个快捷键,动态获取哪个页面
switch (keyCode) {
case getKeyCode('F1'):
console.log('F1');
break;
case getKeyCode('F2'):
console.log('F2');
break;
}
}
// 阻止默认事件
/*e.preventDefault();
return false;*/
return;
}
//跳转url
// 第一个参数可用字符串,也可以用数组,如果是字符串,单独跳转,如果是数组格式,同时跳转
// 第二个参数是用中文名跳转,还是用日文名跳转,0是中文,1是日文
function toUrl(toUrlNames, nameType) {
// 跳转url
var toUrls = {
'动漫花园': 'https://share.dmhy.org/topics/list?keyword=',
'Nyaa表站': 'https://nyaa.si/?f=0&c=1_4&q=',
'Nyaa里站': 'https://sukebei.nyaa.si/?f=0&c=1_1&q='
}
// 获取url
var getToUrl = toUrlNames;
// 判断拼接名称类型
var nameType = nameType;
// 获取标题日文名
var titleName = $('.nameSingle a').html();
// 获取中文名
var zhNames = '';
// 循环遍历词条
$("#infobox li span").each(function(index, ele) {
// 循环遍历标题
var selfText = $(this).html();
// 添加名称
var addName = '';
// 主要标题中文
if (selfText == "中文名: ") {
// 获取番名
addName = $(this).parent().text();
// 截取名称
zhNames = addName.substr(4).replace(/(^\s*)|(\s*$)/g, "").replace(/\)/g, "]").replace(/\(/g, "[");
}
})
// 0的话用中文名跳转
if (nameType == 0) {
// 赋值
nameType = zhNames;
} else if (nameType == 1) {
// 赋值
nameType = titleName;
}
// 判断是否是字符串格式,否则就是数组格式
if (toString.call(toUrlNames) == "[object String]") {
// 跳转页面
window.open(toUrls[getToUrl] + nameType, "_blank");
} else if (toString.call(toUrlNames) == "[object Array]") {
// 创建新数组
var ret = [];
// 循环变量
for (var i = 0; i < getToUrl.length; i++) {
window.open(toUrls[getToUrl[i]] + nameType, "_blank");
}
}
}
})