OneJAVOneWeb

老司机开车带你飞,一个插件畅览几大JAV网站

2021-06-29 يوللانغان نەشرى. ئەڭ يېڭى نەشرىنى كۆرۈش.

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         OneJAVOneWeb
// @namespace    http://tampermonkey.net/
// @version      2021.06228.1400
// @description  老司机开车带你飞,一个插件畅览几大JAV网站
// @author       匿名老司机
// @icon         data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAAAAAAAAQCEeRdzAAAC1klEQVR4nK1V/U+NYRg+/4kxHylUxsx8bD4yH7PxAxmzMfO9qemkcyo5NX1wyEhD6WSpOSXmGG1+UBZJ0rA5FErIGbIoSowu9/1e7znvOfNbvNuznef+uO7rvp/reY4N9f7VWFLQjbh0YHrG6JbmKoZg2ZBQEEB0Kh3xowTUNVkwBMtmoMc6gakOc6Uhgq3+jkljTNCmMVNkxadbMWqTfBti9gEOL/D4NdDaCTS/AFYeAaaZBZYeApqeA2tPEESTL9wFqu8RUGOWHQYedAEpVQI4yQ5U3kHEt70MxhjihNXFFtqKbsCIVabtAdq02MQUYE8F9/k+AdSA5VLBc4vGknpg9gG2sDgPGPpB+/WHnFOUnQz123wGGJsMHK3jfuMpAdQZaOX1J2nc6WGSzm3TaYu1v4ctqi+zhjbXJWBMEnC1DRj+CSw4aALqHLeUMCj5vLQr+yhhk3sF+PUb6JAWv34HFuaSZWIRYytuAxP2Ak+l2LN3xjgswK2lfwNebgUCfUBpA30bigk4NxvoHwIa24FZWcC3YaC2xWBvAW47awFqkp6yVm7qkGKmL6OGhfRkH3UDXR+BdSbbrFojj4DKaIfHAtSZzs8BBqTNm09EDpX0nWvkDHV5m8UvLN3X6DNlZQHuKrcAx8tcEiVgZCRSTtqiHpay1ANRf9sr4EO/KMNlaJSyUUZJppZ2l1MKTi/32raKfVDk8+YTZ6YERCKhr8HPsQk5m1xqXp8yU4c6k3HJbE+/FW5Kw9dm7RVwkWj0yyBtx+o4BgNQgXoH6Ah8pqg14X4nT3JONqVRWBem01Qy7emjTfUaYhhsTb88H4NnZALdvSLmt7x+0WEqcFZzRAr48j1ZzssJPR42I9lexcpq1Nugz9iqQrmSbj4Gup+5H1hzXBi7GKOFEvLlhhVbr44BGGsyMClbT5SDWgzuNSn8ydKluWoLe+oiH9h/WdHBB/Y//wX8ASlYtkPZ5uteAAAAAElFTkSuQmCC
// @include      *://*.javlibrary.com/*
// @include      *://onejav.com/*
// @include      *://*.141jav.com/*
// @include      *://*.jav321.com/*
// @include      *://*.javbus.com/*
// @include      /^.*://.*?avmoo.*?\..+$/
// @include      *://freejavbt.com/*
// @include      *://javmovs.com/*
// @include      *://javfree.sh/*
// @include      *://hpjav.tv/*
// @include      *://javhd.today/*
// @include      *://javtrust.com/*
// @include      *://www3.javfun.me/*
// @include      *://bejav.net/*
// @include      *://sextop.net/*
// @include      *://javdisk.com/*
// @include      *://supjav.com/*
// @include      *://svjav.com/*
// @include      *://fbjav.com/*
// @include      *://javusa.com/*
// @include      *://www2.javhdporn.net/*
// @include      *://javhhh.com/*
// @include      *://kissjav.com/*
// @include      *://javsky.tv/*
// @include      *://javdragon.com/*
// @include      *://javbel.com/*
// @include      *://javmix.tv/*
// @include      *://jav-for.me/*
// @include      *://av-drive.blogspot.com/*
// @include      *://ggjav.com/*
// @include      *://wideav.com/*
// @include      *://javcl.com/*
// @include      *://www.jav321.com/*
// @include      *://jable.tv/*
// @exclude      *://*.javlibrary.com/*/login.php
// @exclude      *://*.javlibrary.com/login.php
// @require      https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js
/* globals       $ */
// @connect      pics.dmm.co.jp
// @connect      jp.netcdn.space
// @run-at       document-end
// @grant        window.close
// @grant        window.onurlchange
// @grant        GM_openInTab
// @grant        GM_xmlhttpRequest
// @grant        GM_registerMenuCommand
// @grant        GM_setValue
// @grant        GM_getValue
// @grant        GM_notification
// @grant        GM_getResourceURL
// @grant        GM_getResourceText
// @grant        GM_addStyle
// @grant        GM_info
// ==/UserScript==
(function () {
    'use strict';
    console.time();
    /* Basic */
    /* Version Update Info */
    // @ts-ignore
    console.log(GM_getValue('version', '2021.0607.0700'));
    // @ts-ignore
    if (GM_info.script.version > GM_getValue('version', '2021.0101.0000')) {
        const style = `#onejav_update_mask{position:fixed;top:0;right:0;bottom:0;left:0;z-index:9999;background-color:rgba(0,0,0,0.8)}#onejav_update_mask>#onejav_update_info{width:35%;position:fixed;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);top:50%;left:50%;padding:12px;border-style:solid;border-color:#ff1493;border-width:10px;border-radius:20px;background-color:#ffdbee;background-clip:padding-box;font-family:"思源黑体"}#onejav_update_mask>#onejav_update_info>#title{font-size:20px;text-align:center}#onejav_update_mask>#onejav_update_info>ul>li{list-style-type:none}#onejav_update_mask>#onejav_update_info>span{color:#ff1493;top:-5px;position:absolute;right:5px;cursor:pointer;font-size:24px}`;
        $('head').append(`<style>${style}</style>`);
        // Update Information
        const msg = [
            '支持OneJav、Javlibrary、AVMOO网站',
            'javlibrary添加剧照预览功能',
            'javlibrary剧照预览功能支持左右按键翻看',
            'javlibrary、avmoo剧照图使用了提前请求提速预览'
        ];
        const divMsg = $(`<div id="onejav_update_mask"><div id="onejav_update_info"><div id="title">OneJAV更新详情</div><ul></ul><span>✖</span></div></div>`);
        for (let s of msg) {
            divMsg.find('ul').append(`<li>${s}</li>`);
        }
        $('body').prepend(divMsg);
        $('#onejav_update_info>span').on('click', function () {
            // @ts-ignore
            GM_setValue('version', GM_info.script.version);
            $(this).parents('#onejav_update_mask').remove();
            return false;
        });
    }
    console.info('老司机开车带你飞');
    console.info('%c ', "background:url('data:image/webp;base64,UklGRuwHAABXRUJQVlA4IOAHAADwPwCdASr6AMMAP73W42s+Mz+pJVNb8/A3iWluul/kqD+zFpTZw9sMvyF2y11qg8h2whWkpbWkvtEoaWWllpZaWR1OVKGZlnra5pOvQq7029DoqdKnSp0c78ZpY3HA+wn055XyL/m1dd7725iXfjDytfKSHSp0qdKd71ckRIpADV2m/Mkw8FwVeBM2XRrV0MJSRVbZfvDvgLh0LTsEqEyypZZqISINwf9ika2p4wRx1fMsnVI8U1QvK0XAv06K2I1ipt+M2ItuLhcsFV3QoBqW9l6nuP9s56mwdze7yGHwELVFJuZMivik5ythHrcjqIQVFMLkBPXMnVJJZRj4iSPYRCE8VMoGNe9e14cVjv9zXk25u11RWnn7Gpl28lncNDHKa3zhh8E1mT6kM0CLXK6g4SZMeZXtoBfWmYNnTqtBZztjUClntjbq8KeaypBOfKZj2FuQhniqnbf5+VF7Qygac942ifgAL8SUdTIOk2u73Yp+e4aSkWVEjeKiMkXGOxddnCxRyPUj1I9TCYM7CmdxgOakyZXfGdHUgeDU3CB5ijLTnILnP/QsgOgEvun/YK79fTns4MqUKOGep4U1QYFDji8k+iUzgdgkMM3m3QBGTXqnSCpAW3sc6Um3XiOKqN+Dre2u+w22aipm/x4UPCY0k3X2SatQG/GojaI9dkxPSH3+keTQbGUAAP7sjm1NTEhPA+8TIfKGmQAG7A2lTthdbtV59/Me/j5+hirPcPUYbLi6/ZIYL4NXX50yNQ7siOkgpTUdmkvYL9M3fcC+TLTWNtpvJ2kRHfEMYpIeAAbWoVhHlDh9U2IVF0Yw/dWOfLjXc+AfdMKg1je7+jGWyiLdAPe8DWl5rvuNmSQJ4WGchw3VTjF5TqRJE1J+XYdkexDfsNgBpDduRc6jEl7Ki3WoMvLaXg39p66FGxrqhLZSN6kWT++8FwBi3tG9Ax1s5xZEsggMnO5+TJbRkohd63GQIMB+fvfRNOu9D8+BRojbZGLE/JjEdjU4F8y/dLJsk+KhHDCd4bdMYnDOPV+U/8r8S9IqKXcrPLfjLyW+8txzhtveeM1mjAihAi8v66Niq/CU07vhLX3VFOqK6tSq1q0rjeeCGk1f0JyoyX6vUSZxrEJXzU1JByvOIJYeo/qCsUaSADc5Hwd9GOOJ14VBUtkv98l3l2d4BaMPT3Y+Cdmqrg/tSBa2AvUSYo/ge/cu8uCH6C50PDIscaZt8bRu6QjHf6raBFxYxzv1Ridgw+ocEqcrQOb7/fKYkBvlCLy+6YKQQTyDmdxwYkUBBazxJsFHEsAe5jS7/ZJtFR8LeQaME3NjorHBaPMQUpVMcw/lJXhN+EahmZ72ZwaP0ZqND3+K1iguFHbYkK72fQyD2hYyDpXCKQuYuMNTeEvCYPtaWKE/HxkypM0okkrcDYuYILd/pcSAAo2Fnityz3uHO/SX9hs1J5ADfrpgxo+UPo3z/Y63h5KTIG8T8r01MLekOJMLPeFN8k5LCwtTTvQ0gPYf6WHAdD0g8htz2dEeQ4458XdMV0FX89xRO7JjutezNTsI7pt29zZAe6YevYCxfJ9Mr3JOodrZ39daLfNb2bMEWMUyMrjcPbpbXg3p/7x7REBSxSDsznru8TDk9InE0ykIVMfJvC67oDiEEFCX1QLMDG18wOphsOVwveWQBL0v3TNkxmTE5Z3c0IjnM1zLFJclcLvc1unnY2ArjhZkpnxVV02rbAlN4Q4BEjsQAPjYR7+93zxsR9dQ/wsEP6BRHH5GqOqbqW6hJZEzXopZkiKxp3u1jPtmGZK3YsmA7ZuDQatzot6sjJgNobuT0rfBXmwO0e49TUFclvHWFuAJARVz5o9K/9iias70D4f5FrCWzLAF0iHByo+lGDTNjCCoA/rSaEZqFQRINJC/jj6+rVhbAE3MiyYlXNiI63n2hKkuf/HvTdhDOWFxY26Y1pK63ZIXhlcfP3ROgU6VwyQtlPzxB/3sgAMud9ajQhZCX+SzQNb2tz1SFGRIJNhrv40LNx+J3FwKQg9uZ4ma//EFMucQ0RgyQODB3XKhqKPD27MOgclZKHIYZxYUPrss+pmERSLVRAu8DzrvUR8kaFsWLJFOrK8DkwgRt5LeU9vMADz6E3x3pBCAvZ/Uod3HK5vNvLUtTEA4Wm/gL6AqjD84M1McsYYTT2csc0gAOjHyOQ1DC/67x+Vpu0znze2fpy4VWfuAjIXQQOY9p+s73sBWjZPDPb5zCiXgsF7FtY/fcuAjkbBVziDQrns0/+tKZ6+TGZ0y5OIz768RUSorrPbI9OThAoR+Fkn3IInVIMK3J1TS3/JioevCgXOQGspIa54BjljlAlOWBac8k5OkxlIMnJACfK1w618NVR4Vfveh1lc7e4NXcveC+WgMxIvDFSTnGintZDgFnTSgN0sXIQFl3LjWcWSjnCGSh3vS0pK9JOLlX02SKfoIQJTdPJ6/0RWLjOQQvuUGUtUK3BXzfBE8cxwnlKD/eb0CngFF4+x1sVZOkOtkoCj7oR8dtNO/bNq6WMsYQsti34hxeB2n1VgR7pb9nm4WSZ2C/8eooC/dxdAuaDf9IdcKxPeF0r7gM7ucC+YTPY7+rJZKOAJd786pPauUL2OmpXZhsYmdgSN+rueQJPjizg168L4aoMYwnQtWkFSTvQ00mB8y6FFCCDpCF5UCAAA=') no-repeat;padding:98px 125px;");
    console.info('%cOneJAV插件使用了“思源黑体”字,请确保你的计算机安装了该字体\nhttps://github.com/adobe-fonts/source-han-sans/tree/release/OTF/SimplifiedChinese', 'margin:1px;border:3px solid orange;border-radius:5px;padding:3px;line-height:1.8;');
    //@ts-ignore
    GM_registerMenuCommand('下载思源黑体字体', () => {
        //@ts-ignore
        GM_openInTab('https://cdn.jsdelivr.net/gh/adobe-fonts/source-han-sans@release/OTF/SimplifiedChinese/SourceHanSansSC-Regular.otf', { active: true, insert: true, setParent: true });
    });
    //@ts-ignore
    const resource = GM_getResourceText('onejavdata');
    try {
        var data = JSON.parse(resource);
    }
    catch (error) {
        console.error(`OnaJAV ERROR:`, error);
    }
    // @ts-check

    class JAV {
        constructor(i) {
            [this.bango, this.fanHao] = (() => {
                const o = i.trim().replace(/ +/, '-');
                let t = o.match(/FC2-?PPV-?(\d+)/i);
                if ((t = o.match(/FC2-?PPV-?(\d+)/i))) {
                    return [`FC2PPV${t[1]}`, `FC2PPV-${t[1]}`];
                }
                else if ((t = o.match(/([a-zA-Z]+)-?(\d+)/i))) {
                    return [`${t[1].toUpperCase()}${t[2]}`, `${t[1].toUpperCase()}-${t[2]}`];
                }
                else {
                    console.info(`JAV:${i}处理失败,反馈给作者修复bug`);
                    return [i, i];
                }
            })();
            this.data = {
                freejavbt: {
                    name: 'JAV目錄大全',
                    color: '#fe1773',
                    origin: 'https://freejavbt.com',
                    uri: `/${this.fanHao}`
                },
                javmovs: {
                    name: 'JAVMOVS',
                    color: '#79c142',
                    origin: 'https://javmovs.com',
                    uri: `/${this.fanHao}`
                },
                javfree: {
                    name: 'Javfree',
                    color: '#df6e05',
                    origin: 'https://javfree.sh',
                    uri: `/search/movie/${this.fanHao}`
                },
                hpjav: {
                    name: 'HPJAV',
                    color: '#f96364',
                    origin: 'https://hpjav.tv',
                    uri: `/?s=${this.fanHao}`
                },
                javhd: {
                    name: 'JAVHD',
                    color: '#cb000d',
                    origin: 'https://javhd.today',
                    uri: `/search/video/?s=${this.fanHao}`
                },
                javtrust: {
                    name: 'JAVTRUST',
                    color: '#e38a5a',
                    origin: 'https://javtrust.com',
                    uri: `/search/movie/${this.fanHao}.html`
                },
                javfun: {
                    name: 'JAVFUN',
                    color: '#79c142',
                    origin: 'https://www3.javfun.me',
                    uri: `/search/${this.fanHao}`
                },
                bejav: {
                    name: 'BEJAV',
                    color: '#fd6500',
                    origin: 'https://bejav.net',
                    uri: `/search/${this.fanHao}`
                },
                sextop: {
                    name: 'SEXTOP',
                    color: '#c20001',
                    origin: 'https://sextop.net',
                    uri: `/?s=${this.fanHao}&search=Search`
                },
                javdisk: {
                    name: 'JAVDISK',
                    color: '#fe121e',
                    origin: 'https://javdisk.com',
                    uri: `/search.html?q=${this.fanHao}`
                },
                supjav: {
                    name: 'SUPJAV',
                    color: '#d8201d',
                    origin: 'https://supjav.com',
                    uri: `/?s=${this.fanHao}`
                },
                svjav: {
                    name: 'SVJAV',
                    color: '#cc2748',
                    origin: 'https://svjav.com',
                    uri: `/${this.fanHao}/`
                },
                fbjav: {
                    name: 'FBJAV',
                    color: '#365899',
                    origin: 'https://fbjav.com',
                    uri: `/${this.fanHao}/`
                },
                javusa: {
                    name: 'JAVUSA',
                    color: '#0f0f0f',
                    origin: 'https://javusa.com',
                    uri: `/jav/${this.fanHao}/`
                },
                javhdporn: {
                    name: 'JAVHDPorn',
                    color: '#fa9f22',
                    origin: 'https://www2.javhdporn.net',
                    uri: `/video/${this.fanHao}/`
                },
                javhhh: {
                    name: 'JAVHHH',
                    color: '#da2657',
                    origin: 'https://javhhh.com',
                    uri: `/video/${this.fanHao}/`
                },
                kissjav: {
                    name: 'KISSJAV',
                    color: '#00a2e8',
                    origin: 'https://kissjav.com',
                    uri: `/search/video/?s=${this.fanHao}`
                },
                javsky: {
                    name: 'JAVSKY',
                    color: '#ca6e00',
                    origin: 'https://javsky.tv',
                    uri: `/search/movie/${this.fanHao}`
                },
                javdragon: {
                    name: 'JavDragon',
                    color: '#ec4caf',
                    origin: 'https://javdragon.com',
                    uri: `/${this.bango}/`
                },
                javbel: {
                    name: 'JAVBEL',
                    color: '#ff5b15',
                    origin: 'https://javbel.com',
                    uri: `/search.php?q=${this.fanHao}`
                },
                javmix: {
                    name: 'Javmix',
                    color: '#f7c54c',
                    origin: 'https://javmix.tv',
                    uri: `/video/${this.fanHao}/`
                },
                javfor: {
                    name: 'JAV-FOR',
                    color: '#f0542e',
                    origin: 'https://jav-for.me',
                    uri: `/`
                },
                avdrive: {
                    name: 'av-Drive',
                    color: '#8ce1f5',
                    origin: 'https://av-drive.blogspot.com',
                    uri: `/`
                },
                ggjav: {
                    name: 'GGJAV',
                    color: '#2287f0',
                    origin: 'https://ggjav.com',
                    uri: `/ja/main/search?string=${this.fanHao}`
                },
                wideav: {
                    name: 'WideAV',
                    color: '#3e7bee',
                    origin: 'https://wideav.com',
                    uri: `/search?keyword=${this.fanHao}`
                },
                javcl: {
                    name: 'JAVCL',
                    color: '#ffcc00',
                    origin: 'https://javcl.com',
                    uri: `/search/${this.fanHao}/`
                },
                jav321: {
                    name: 'JAV321',
                    color: '#777',
                    origin: 'https://www.jav321.com',
                    uri: `/?bango=${this.fanHao}`
                },
                jable: {
                    name: 'Jable',
                    color: '#0077ac',
                    origin: 'https://jable.tv',
                    uri: `/search/${this.fanHao}/`
                },
                onejav: {
                    name: 'OneJAV',
                    color: '#f5da47',
                    origin: 'https://onejav.com',
                    uri: `/search/${this.bango}`
                },
                avmoo: {
                    name: 'AVMOO',
                    color: '#cc0000',
                    origin: 'https://avmoo.casa',
                    uri: `/cn/search/${this.fanHao}`
                },
                javbus: {
                    name: 'JavBus',
                    color: '#febe00',
                    origin: 'https://www.javbus.com',
                    uri: `/search/${this.fanHao}`
                },
                javlibarary: {
                    name: 'JAVLibrary',
                    color: '#f908bb',
                    origin: 'https://www.javlibrary.com',
                    uri: `/cn/vl_searchbyid.php?keyword=${this.fanHao}`
                },
                sextb: {
                    name: 'SEXTB',
                    color: '#f5c823',
                    origin: 'https://sextb.net',
                    uri: `/${this.fanHao}`
                }
            };
            (() => {
                for (let e in this.data) {
                    this.data[e].url = `${this.data[e].origin}${this.data[e].uri}`;
                    delete this.data[e].origin;
                    delete this.data[e].uri;
                }
            })();
        }
        create_table() {
            const rows = 4;
            const tableDataLength = Object.keys(this.data).length;
            let tableData = this.data;
            let htmlTable = `<div id="jav_table" style="font-family:'思源黑体';font-weight:700;font-size:18px;display:inline-block;position:absolute;z-index:999;background-color:#fff;"><table border="1" cellspacing="0" style="border-spacing:0;line-height:1.6;">`;
            let htmlTbody = ``;
            let o = 0;
            if (tableDataLength % rows != 0) {
                for (let index = tableDataLength; index < tableDataLength + rows - (tableDataLength % rows); index++) {
                    tableData[`temp_${index}`] = {
                        name: '',
                        color: '#ffffff',
                        url: '#'
                    };
                }
            }
            for (let index in tableData) {
                if ((o + 1) % rows == 1) {
                    htmlTbody += '<tr>';
                }
                htmlTbody += `<td>&nbsp<a target="_blank" style="color:${tableData[index].color}" href="${tableData[index].url}">${tableData[index].name}</a>&nbsp</td>`;
                if ((o + 1) % rows == 0) {
                    htmlTbody += '</tr>';
                }
                o++;
            }
            htmlTable += `${htmlTbody}</table></div>`;
            return htmlTable;
        }
    }
    /* OneJAV 141jav */
    if (null != location.hostname.match(/onejav.com|141jav.com/)) {
        (() => {
            $('body').on('mouseenter', '.card.mb-3>.container>.columns>.column:even', function () {
                const bango = $(this).parents('.columns').find('.title.is-spaced>a').text().trim();
                const jav = new JAV(bango);
                $(this).prepend(jav.create_table());
                return false;
            });
            $('body').on('mouseleave', '.card.mb-3>.container>.columns>.column:even', function () {
                $(this).find('#jav_table').remove();
                return false;
            });
            // Show a table without no search reasult
            if (null != location.pathname.match(/\/search\/[a-zA-Z0-9-]/) && 0 == $('div.card.mb-3').length) {
                const jav = new JAV(location.pathname.substr(8));
                $('div.container').append(jav.create_table());
            }
        })();
    }
    /* avmoo javbus */
    if (null != location.hostname.match(/avmoo|javbus/)) {
        (() => {
            const showBoxes = $('.movie-box');
            if (1 == showBoxes.length) {
                location.href = showBoxes[0].href;
            }
            $('body').on('mouseenter', '.col-md-9.screencap', function () {
                const bango = $('body > div.container > h3').text().trim().split(' ')[0];
                const jav = new JAV(bango);
                $(this).prepend(jav.create_table());
                return false;
            });
            $('body').on('mouseleave', '.col-md-9.screencap', function () {
                $(this).find('#jav_table').remove();
                return false;
            });
            $('#sample-waterfall > a').each((_, a) => {
                // @ts-ignore
                GM_xmlhttpRequest({
                    method: 'GET',
                    url: a.href,
                    responseType: 'blob',
                    onload: (res) => {
                        const blob = new Blob([res.response], { type: 'image/jpeg' });
                        a.href = URL.createObjectURL(blob);
                    }
                });
            });
        })();
    }
    /* javlibarary */
    if (null != location.hostname.match(/javlibrary/) && null == location.hostname.match(/javlibrary\.com.*?\/login/)) {
        (() => {
            const style = `.pointer,#onejav_modal *{cursor:pointer}#onejav_modal{color:#dcdcdc;font-size:64px;font-weight:700;font-family:'思源黑体';background-color:rgba(0,0,0,0.8);position:fixed;top:0;right:0;bottom:0;left:0;z-index:99}#onejav_modal img{cursor:default;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);position:absolute;top:50%;right:auto;bottom:auto;left:50%}#onejav_modal #left{-webkit-transform:translateY(-50%);transform:translateY(-50%);position:absolute;top:50%;right:auto;bottom:auto;left:10px}#onejav_modal #left::after{content:"◀"}#onejav_modal #left:hover{color:#fff}#onejav_modal #right{-webkit-transform:translateY(-50%);transform:translateY(-50%);position:absolute;top:50%;right:10px;bottom:auto;left:auto}#onejav_modal #right::after{content:"▶"}#onejav_modal #right:hover{color:#fff}#onejav_modal #close{position:absolute;top:0;right:10px;bottom:auto;left:auto}#onejav_modal #close::after{content:"✖"}#onejav_modal #close:hover{color:#fff}`;
            $('head').append(`<style>${style}</style>`);
            const sourceArr = $('#rightcolumn > div.previewthumbs > img').map((_, img) => img.src);
            const srcArr = sourceArr.map((_, source) => {
                const match = source.match(/digital\/video\/(\w+)\/\1-(\d+.jpg)/i);
                const src = source.replace(match[0], `digital/video/${match[1]}/${match[1]}jp-${match[2]}`);
                return src;
            });
            srcArr.each((index, src) => {
                // @ts-ignore
                GM_xmlhttpRequest({
                    method: 'GET',
                    url: src,
                    responseType: 'blob',
                    onload: (res) => {
                        const blob = new Blob([res.response], { type: 'image/jpeg' });
                        srcArr[index] = URL.createObjectURL(blob);
                    }
                });
            });
            const modal = $(`<div id="onejav_modal"><img src="" alt="预览大图"/><div id="left"></div><div id="right"></div><div id="close"></div></div>`);
            $('#rightcolumn > div.previewthumbs > img').each(function (index, img) {
                $(img).addClass('pointer');
                $(img).on('click', () => {
                    modal.find('img')[0].src = srcArr[index];
                    $('body').append(modal);
                    let i = 0;
                    $('body').on('click', '#onejav_modal>#left', () => {
                        i -= 1;
                        if (i < 0) {
                            i = srcArr.length - 1;
                        }
                        $('#onejav_modal>img')[0].src = srcArr[i];
                        return false;
                    });
                    $('body').on('click', '#onejav_modal>#right', () => {
                        i += 1;
                        if (i > srcArr.length - 1) {
                            i = 0;
                        }
                        $('#onejav_modal>img')[0].src = srcArr[i];
                        return false;
                    });
                    $('body').on('click', '#onejav_modal>img', () => {
                        return false;
                    });
                    $('body').on('click', '#onejav_modal', () => {
                        $('#onejav_modal').remove();
                        $('body').off('keydown.onejav');
                        return false;
                    });
                    $('body').on('keydown.onejav', (event) => {
                        if (event.key == 'ArrowLeft') {
                            $('#onejav_modal>#left').trigger('click');
                        }
                        else if (event.key == 'ArrowRight') {
                            $('#onejav_modal>#right').trigger('click');
                        }
                        else if (event.key == 'Escape') {
                            $('#onejav_modal').trigger('click');
                        }
                        return false;
                    });
                    return false;
                });
            });
            $('body').on('mouseenter', '.video', function () {
                const bango = $(this).find('.id').text().trim().split(' ')[0];
                const jav = new JAV(bango);
                const html = `<div class="newBox" style="position:absolute;z-index:999;top:0;right:0;"><button style="display:block;" link="${jav.data.onejav.url}">${jav.data.onejav.name}</button><button style="display:block;" link="${jav.data.avmoo.url}">${jav.data.avmoo.name}</button><button style="display:block;" link="${jav.data.jable.url}">${jav.data.jable.name}</button></div>`;
                $(this).prepend(html);
                $('.newBox>button').on('click', function () {
                    window.open($(this).attr('link'));
                    return false;
                });
            });
            $('body').on('mouseleave', '.video', function () {
                $(this).find('.newBox').remove();
                return false;
            });
            $('body').on('mouseenter', '#video_jacket', function () {
                const bango = $('#video_title > h3').text().trim().split(' ')[0];
                const jav = new JAV(bango);
                $(this).prepend(jav.create_table());
                return false;
            });
            $('body').on('mouseleave', '#video_jacket', function () {
                $(this).find('#jav_table').remove();
                return false;
            });
        })();
    }
    /* jav321 */
    if (null != location.hostname.match(/jav321/)) {
        (() => {
            const search = location.search.substr(1);
            if (null != search.match(/bango=.+/i)) {
                const params = Object.fromEntries(search.split('&').map((i) => i.split('=')));
                $('body > div:nth-child(2) > div > nav > div > form:nth-child(2) > div > input')[0].value =
                    params.bango;
                $('body > div:nth-child(2) > div > nav > div > form:nth-child(2) > div > span > button')[0].click();
                window.close();
            }
        })();
    }
    console.timeEnd();
})();