Bangumi详情页 监听页面快捷键打开网站【可自行定制】 2020年9月28日

Bangumi详情页 监听页面快捷键单独/批量打开跳转网页

// ==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");
            }
        }
    }
})