Greasy Fork

Greasy Fork is available in English.

VIP会员视频在线解析大集合

[腾讯|爱奇艺|优酷|乐视|芒果|AB站|音悦台]等VIP或会员视频,在线解析接口插件

当前为 2020-04-26 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         VIP会员视频在线解析大集合
// @namespace    http://greasyfork.icu/zh-CN/users/505018
// @version      1.0.1
// @description  [腾讯|爱奇艺|优酷|乐视|芒果|AB站|音悦台]等VIP或会员视频,在线解析接口插件
// @author       DreamFly
// @noframes
// @require      https://greasemonkey.github.io/gm4-polyfill/gm4-polyfill.js
// @match        http*://v.qq.com/x/cover/*
// @match        http*://*.iqiyi.com/*
// @match        http*://*.youku.com/*
// @match        http*://*.le.com/*
// @match        http*://*.letv.com/*
// @match        http*://*.tudou.com/*
// @match        http*://*.mgtv.com/*
// @match        http*://film.sohu.com/*
// @match        http*://tv.sohu.com/*
// @match        http*://*.acfun.cn/v/*
// @match        http*://*.bilibili.com/*
// @match        http*://vip.1905.com/play/*
// @match        http*://*.pptv.com/*
// @match        http*://v.yinyuetai.com/video/*
// @match        http*://v.yinyuetai.com/playlist/*
// @match        http*://*.fun.tv/vplay/*
// @match        http*://*.wasu.cn/Play/show/*
// @match        http*://*.56.com/*
// @exclude      http*://*.bilibili.com/blackboard/*
// @grant        GM.getValue
// @grant        GM.setValue
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        unsafeWindow
// @grant        GM_xmlhttpRequest
// @grant        GM.xmlHttpRequest
// @grant        GM_openInTab
// @grant        GM.openInTab
// ==/UserScript==

(function() {
    'use strict';

    const VQQIcon = '<svg height="1.2em" width="1.2em" viewbox="0 0 185 170"><defs><path id="vQQ" d="M7 20 Q14 -10 55 7 Q100 23 145 60 Q170 80 145 102 Q108 138 47 165 Q15 175 4 146 Q-5 80 7 20"></path></defs><use style="fill:#44B9FD;" transform="translate(27,0)" xlink:href="#vQQ"></use><use style="fill:#FF9F01;" transform="translate(0,18),scale(0.8,0.75)" xlink:href="#vQQ"></use><use style="fill:#97E61B;" transform="translate(23,18),scale(0.80.75)" xlink:href="#vQQ"></use><use style="fill:#fff;" transform="translate(50,45),scale(0.4)" xlink:href="#vQQ"></use></svg>';
    const IQiyiIcon = '<svg xmlns="http://www.w3.org/2000/svg" x="0" y="0" width="12" height="12"><image width="12" height="12" x="0" y="0" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMEAYAAAAG5YCkAAAABGdBTUEAALGPC/xhBQAAACBjSFJN AAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0T///////8JWPfcAAAA B3RJTUUH4wgJFC0QN86G4AAAA8FJREFUOMsFwX1MlHUAwPHv73meu5PjnWMSkSZYDHRuzj8UEbXN CudEQXQunAOzWnO1+V5BC5i6U7NcqPmW4cK0mSaWIYWJQbrKNSCiVGwnKHpyceDD2z33PPf8+nyE c/judTh3jQamQ2GZ7KALVJ/soxtA5tEDwBkeA6ARBqCIWABxjWcBRCI5AGI2z0NkKkX4of6kcMZ3 u8FUtZep13Zplme9OsPjh8Sl6s7EnyC6Rfkz5mlwbRVB5+dANhGRAeF+OdlogZG37byRKTDksvcN HYSBYqtt4DqEe8gyf7Y0kZx150psh5Tlucn5H3wI6XOV/Rn7QLetXL0XzDq5x/wM7DRZZieCXMYd uQTUcXFTBVwlSvuEzRC9RPW4C+DhXftgXwvsXDhQUd0JWmoueWmLIcFt3UisgOOr9DnHciA1yrE9 tQru9Zu7fT/AvQ7zG58B7iPKafdfoFVxWTsB+opIly5g2rDz9PTbULgvzrviCDzj4/CkvaCJ3Eir 2A4PDhiLHpyD/A1x8xaXQ/JsdifnQ/ze+OL4m9CxJxRoL4CYI+LNGBU8L2plHjfoL8iA/hqELlsF 4W0Q9bX6vdsBCRPF/oRaUBw75B5HMyQsUI2EcYhtZU7MGugtNk/dbwe73z4kN0L0CZke7YbRj6zV YzXwz9nR0VvLYEV03L8rl8B1j36q9SJMaBFRrpdAO2Ab2gNQ3CVybfS3MMXrqkyfBsph2a02AXX2 PO4DvfIWIcBvzweQbfKCXQu/TNNLW9PAVzxe6/NB++8jt9s6QZkrtyk5QE9kHYAS2RDZFCmHcZ/V O74Y+meFegOX4Lkapzb1PrjWYjjjYKzQzBkvhHC7NSncBU8qTNdQJvStNi48fAfGqqzvxtJhNGJO HTsKps9Ktx6Bps8xFj3JgsH1xuygA85/2b/1bBdMXCMcKQZk/u1uzUyCplf0vh+/AP1Xe7peDEPL ZdLgVdj1ru+r6hhwNyp/uL3wX6PRF6iB4KdGVrASNH9BKOzXwVpgLYy8Du95J22pOAPB49beoBfC Jfal8ElIb499I6MH5HzxvqwCx0bqHevAuVJsdh6FxAa1JakDAtmhmYFK8BeFmh/FgtDym7PBdDob I1tcqZrx1BQlLSUFkoJaadJGiKlVumN7wHVD2eTSgIWYzIJwtX0gvBqG6+yS4VIYfMs6HRwEf5P9 yeMGMPJVbyhoOYUj7aoK5yfLHXIAlsfJj6kBtdP+TW4DIA8vgDzGFQAkQQBRwioAmigHUGaKQwCi mlchMkMcFh64OPI/QLSjdm0wihoAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTktMDgtMTBUMDM6NDU6 MTYtMDc6MDBV2/HBAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE5LTA4LTEwVDAzOjQ1OjE2LTA3OjAw JIZJfQAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII="/></svg>';
    const YoukuIcon = '<svg width="1.2em" height="1.2em" viewbox="0 0 72 72"><defs><circle id="youkuC1" r="5.5" style="stroke:none;;fill:#0B9BFF;"></circle><path id="youkuArow" d="m0,10 a5,5 0,0,1 0,-10 h20 a5,5 0,0,1 0,10z" style="fill:#FF4242;"></path></defs><circle cx="36" cy="36" r="30.5" style="stroke:#30B4FF;stroke-width:11;fill:none;"></circle><use x="10.5" y="19" xlink:href="#youkuC1"/><use x="61.5" y="53" xlink:href="#youkuC1"/><use x="39" y="1" transform="rotate(30)" xlink:href="#youkuArow"/><use x="-1" y="52" transform="rotate(-35)" xlink:href="#youkuArow"/></svg>';
    var icon = '';
    var websites = [/qq.com/i , /iqiyi.com/i, /youku.com/i]
    var webIcons = [VQQIcon, IQiyiIcon, YoukuIcon]

    for (let i in websites) {
        if (websites[i].test(location.href)){
            icon = webIcons[i];
        }
    }

    var defaultapi = {
        title: "618G,失效请更换接口",
        url: "http://jx.618g.com/?url="
    };

    //apis name:显示的文字  url:接口  title:提示文字  intab:是否适合内嵌(嵌入判断:GMgetValue("replaceRaw",false)值||intab值)
    var apis =[
        { name:"618G"+icon, url:"http://jx.618g.com/?url=", title:"618G", intab:0 },
        { name:"玩的嗨"+icon, url:"http://tv.wandhi.com/go.html?url=", title:"综合接口,一键VIP*** 更新可用【作者mark zhang】脚本的接口", intab:0 },
        { name:"搜你妹"+icon, url:"http://www.sonimei.cn/?url=", title:"综合接口,VIP视频*** 更新可用【作者sonimei134】脚本的接口", intab:0 },
        { name:"TIMERD"+icon, url:"https://timerd.me/static/cv.html?zwx=", title:"不稳定,广告过滤软件可能有影响", intab:1 },
        { name:"石头解析"+icon, url:"https://jiexi.071811.cc/jx.php?url=", title:"手动点播放", intab:1 },
        { name:"乐乐云"+icon, url:"https://660e.com/?url=", title:"乐乐云,未知效果", intab:1 },
        { name:"小鑫视频"+icon, url:"https://www.3aym.cn/?url=", title:"小鑫视频,未知效果", intab:0 },
        { name:"VIP看看"+icon, url:"http://q.z.vip.totv.72du.com/?url=", title:"更换线路成功率会提高", intab:1 },
        { name:"163人"+icon, url:"http://jx.api.163ren.com/vod.php?url=", title:"偶尔支持腾讯", intab:1 },
        { name:"无名小站"+icon, url:"http://www.sfsft.com/admin.php?url=", title:"无名小站同源", intab:1 },
        { name:"无名小站2"+icon, url:"http://www.wmxz.wang/video.php?url=", title:"转圈圈就换线路", intab:1 },
        { name:"人人发布"+icon, url:"http://v.renrenfabu.com/jiexi.php?url=", title:"综合,多线路", intab:0 }
    ];

    var cssStyle = `
/*TMHY:TamperMonkeyHuanYan*/
#TMHYvideoContainer {z-index:999998;background:rgba(0,0,0,.7);position:fixed;top:7em;left:5em;height:65%;width:65%;resize:both;overflow:auto;box-shadow:2px 2px 5px 5px rgba(255,255,0,.8);}
/*TMHYVideoContainer*/
#TMHYvideoContainer button {top:.1em;cursor:pointer;visibility:hidden;font-size:3em;color:#fff;background:transparent;border:0;}
#TMHYvideoContainer:hover button {visibility:visible;}
#TMHYvideoContainer:hover button:hover {color:#ff0;}
#TMHYiframe {height:100%;width:100%;overflow:auto;position:absolute;top:0;left:0;margin:auto;border:0;box-shadow:0 0 3em rgba(0,0,0,.4);z-index:-1;}
/*TMHYIframe*/
#TMHYul {position:fixed;top:5em;left:0;padding:0;z-index:999999;}
#TMHYul li {list-style:none;}
#TMHYul svg {float:right;}
#tMuserDefine li {margin:5px;width:100%;list-style-type:none;}
#inTabSettingSave {position:relative;margin-top:10px;padding:3px 20px;}
.TM1 {opacity:0.3;position:relative;padding-right:.5em;width:1.5em;cursor:pointer;}
.TM1:hover {opacity:1;}
.TM1 span {display:block;border-radius:0 .3em .3em 0;background-color:#ffff00;border:0;font:bold 1em "微软雅黑"!important;color:#ff0000;margin:0;padding:1em .3em;}
.TM3 {position:absolute;top:0;left:1.5em;display:none;border-radius:.3em;margin:0;padding:0;}
.TM3 li {float:none;width:7em;margin:0;font-size:1em;padding:.15em 1em;cursor:pointer;color:#3a3a3a!important;background:rgba(255,255,0,0.8);}
.TM3 li:hover {color:white!important;background:rgba(0,0,0,.8);}
.TM3 li:last-child {border-radius:0 0 .35em .35em;}
.TM3 li:first-child {border-radius:.35em .35em 0 0;}
.TM1:hover .TM3 {display:block;}
/*自定义解析接口,本页播放窗口设置*/
.TMHYp {position:fixed;top:20%;left:20%;z-index:999999;background:yellow;padding:30px 20px 10px 20px;border-radius:10px;text-align:center;}
.TMHYp * {font-size:16px;background:rgba(255,255,0,1);font-family:'微软雅黑';color:#3a3a3a;border-radius:10px;}
.TMHYp fieldset {margin:0;padding:10px;}
.TMHYp legend {padding:0 10px;}
.TMHYp label {display:inline-block;}
.TMHYp input[type=text] {border-radius:5px !important;border:1px solid #3a3a3a;margin:2px 10px 2px 5px;padding:2px 5px;}
.TMHYp button {border:1px solid #3a3a3a;border-radius:5px;cursor:pointer;padding: 2px 10px;margin:10px 20px 0 20px;}
.TMHYp button:hover {background:#3a3a3a;color:yellow;}
/*TMHYlti*/
.TMHYlti {width:350px;}
/*TMHYmti*/
.TMHYmti {width:160px;}
.TMHYClose {position:absolute;top:0;left:0;margin:0!important;}
.TMHYspan80 {display:inline-block;text-align:right;width:80px;}
.TMHYspan120 {display:inline-block;text-align:right;width:120px;}
.idelete {float: left;  display: inline-block; color: red; padding: 0 20px !important; cursor: pointer;}
.iname {padding-right:10px;}
li:hover .idelete,li:hover .ilink,li:hover .iname {background:rgba(224,175,17,0.62);}
`

    /* 兼容 Tampermonkey | Violentmonkey | Greasymonkey 4.0+ */
    function GMaddStyle(cssText){
        let doc = document.head || document.documentElement;
        let tag = document.createElement('style');
        tag.textContent = cssText;
        doc.appendChild(tag);
    }

   /* 兼容 Tampermonkey | Violentmonkey | Greasymonkey 4.0+
   * 为了兼容GreasyMonkey 4.0 获取结构化数据,比如 json Array 等,
   * 应当先将字符串还原为对象,再执行后续操作
   * GMgetValue(name,defaultValue).then((result)=>{
   *   let result = JSON.parse(result);
   *   // other code...
   * };
   */
    function GMgetValue(name, defaultValue) {
        if (typeof GM_getValue === 'function') {
            return new Promise((resolve, reject) => {
                resolve(GM_getValue(name, defaultValue));
            });
        } else {
            return GM.getValue(name, defaultValue);
        }
    }

    /* 兼容 Tampermonkey | Violentmonkey | Greasymonkey 4.0+
   * 为了兼容GreasyMonkey 4.0 储存结构化数据,比如 json Array 等,
   * 应当先将对象字符串化,
   * GMsetValue(name, JSON.stringify(defaultValue))
   */
    function GMsetValue(name, defaultValue) {
        if (typeof GM_setValue === 'function') {
            GM_setValue(name, defaultValue);
        } else {
            GM.setValue(name, defaultValue);
        }
    }

    function GMxmlhttpRequest(obj){
        if (GM_xmlhttpRequest === "function") {
            GM_xmlhttpRequest(obj);
        } else{
            GM.xmlhttpRequest(obj);
        }
    }

    //添加css
    GMaddStyle(cssStyle);

    //嵌入页面播放
    function openInTab(evt) {
        // 找到支持的方法, 使用需要全屏的 element 调用
        function launchFullScreen(element) {
            if(element.requestFullscreen) {
                element.requestFullscreen();
            } else if(element.mozRequestFullScreen) {
                element.mozRequestFullScreen();
            } else if(element.webkitRequestFullscreen) {
                element.webkitRequestFullscreen();
            } else if(element.msRequestFullscreen) {
                element.msRequestFullscreen();
            }
        }

        if(evt.target.dataset.intab === '1'){
            //如果页面有播放窗口,只需更新播放窗口的 src, 如果没有播放窗口,读取播放窗口位置信息,新建一个播放窗
            if(document.querySelector('#TMHYiframe') === null){
                GMgetValue('intabSize','{"height":"","width":"","left":"","top":""}').then((position)=>{
                    var sty = JSON.parse(position);
                    var divTag = document.createElement('div');
                    divTag.id = 'TMHYvideoContainer';
                    divTag.setAttribute('style', 'height:'+sty.height+';width:'+sty.width+';left:'+sty.left+';top:'+sty.top+';');
                   divTag.innerHTML = '<button title="关闭" id="TMHYIframeClose">&#128473;</button><button id="TMHYfullScreen" title="全屏">&#128470;</button>';
                    document.body.appendChild(divTag);

                    var iframeTag = document.createElement('iframe');
                    iframeTag.id = 'TMHYiframe';
                    iframeTag.src = evt.target.dataset.url + location.href;
                    document.querySelector('#TMHYvideoContainer').appendChild(iframeTag);
                    document.querySelector('#TMHYIframeClose').addEventListener('click', ()=>{document.body.removeChild(document.querySelector('#TMHYvideoContainer'));}, false);
                    document.querySelector('#TMHYfullScreen').addEventListener('click', ()=>{launchFullScreen(document.querySelector('#TMHYiframe'));}, false);
                });
            } else{
                document.querySelector('#TMHYiframe').src = evt.target.dataset.url + location.href;
            }
        } else{
            //不适合页内播放的,打开新标签
            window.open(evt.target.dataset.url + location.href);
        }
    }

    //保存嵌入页面大小位置设置
    function saveInTabSetting(){
        var intabSize = {
            height:document.querySelector('#TMpH').value,
            width:document.querySelector('#TMpW').value,
            left:document.querySelector('#TMpL').value,
            top:document.querySelector('#TMpT').value
        };

        GMsetValue('intabSize', JSON.stringify(intabSize));
        setTimeout(function(){ document.body.removeChild(document.querySelector("#TMHYSetting")); }, 30);
    }

    //生成"嵌入页面大小位置设置"面板
    function intabSetting(){
        var intabSize = GMgetValue('intabSize','{"height":"","width":"","left":"","top":""}')
        .then((ag)=>{
            let divTag = document.createElement('div');
            divTag.id = 'TMHYSetting';
            divTag.setAttribute('class', 'TMHYp');
            divTag.innerHTML = `
<button class="TMHYClose" onclick="document.body.removeChild(this.parentNode)">&#128473;</button>
<fieldset>
<legend>页内播放窗口位置大小</legend>
<label for="TMpH"><span class="TMHYspan80">高度</span><input type="text" id="TMpH" value="${intabSize.height}"  class="TMHYmti" placeholder='如"300px"或者"65%"'/></label>
<label for="TMpW"><span class="TMHYspan80">宽度</span><input type="text" id="TMpW" value="${intabSize.width}"  class="TMHYmti" placeholder='如"300px"或者"65%"'/></label><br />
<label for="TMpL"><span class="TMHYspan80">左边距</span><input type="text" id="TMpL" value="${intabSize.left}"  class="TMHYmti" placeholder='如"300px"或者"65%"'/></label>
<label for="TMpT"><span class="TMHYspan80">上边距</span><input type="text" id="TMpT" value="${intabSize.top}"  class="TMHYmti" placeholder='如"300px"或者"65%"'/></label>
</fieldset>
<button onclick="(function(){var a=getComputedStyle(document.querySelector('#TMHYvideoContainer'));document.querySelector('#TMpH').value=a.height,document.querySelector('#TMpW').value=a.width,document.querySelector('#TMpL').value=a.left,document.querySelector('#TMpT').value=a.top;})()">获取当前播放窗尺寸</button>
<button id="intabSettingPreview" onclick="(function(){a=document.querySelector('#TMHYvideoContainer').style.cssText='height:'+document.querySelector('#TMpH').value+';width:'+document.querySelector('#TMpW').value+';left:'+document.querySelector('#TMpL').value+';top:'+document.querySelector('#TMpT').value+';';})()">预览</button>
<button id="intabSettingSave">保存</button>
`;
            document.body.appendChild(divTag);
            document.querySelector('#intabSettingSave').addEventListener('click', saveInTabSetting, false);
        });
    }

    var replaceRaw; //是否嵌入当前页面
    var episodes; //是否启用爱奇艺正确选集
    var userApisOn; //是否加载自定义解析接口

    //检查是否勾选页内解析
    function noNewTabCheck() {
        var x, arr = document.querySelectorAll(".TM4 li");

        replaceRaw = document.querySelector("#intabChekbx").checked;
        GMsetValue("replaceRaw", replaceRaw);

        for (x = 0; x < arr.length; x++) {
            if (replaceRaw) {
                arr[x].addEventListener("click", openInTab, false);
                arr[x].setAttribute('onclick', '');
            } else {
                arr[x].removeEventListener("click", openInTab, false);
                arr[x].setAttribute('onclick', 'window.open(this.dataset.url + location.href)');
            }
        }
    }

    /* 爱奇艺正确选集 */
    function rightEpsLinkCheck() {
        episodes = document.querySelector("#realLinkChekbx").checked;
        GMsetValue("episodes", episodes);

        function getLink(e) {
            //-------------iqiyi剧集真实播放页面方法  Begin------------------
            //Code piece infomation:
            //License:MIT   Author:hoothin  Homepage: http://hoothin.com  Email: [email protected]
            var target = e.target.parentNode.tagName == "LI" ? e.target.parentNode : (e.target.parentNode.parentNode.tagName == "LI" ? e.target.parentNode.parentNode : e.target.parentNode.parentNode.parentNode);
            if (target.tagName != "LI") return;

            GMxmlhttpRequest({
                method: 'GET',
                url: "http://cache.video.qiyi.com/jp/vi/" + target.dataset.videolistTvid + "/" + target.dataset.videolistVid + "/?callback=crackIqiyi",
                onload: function(result) {
                    var crackIqiyi = function(d) { location.href = d.vu; };
                    eval(result.responseText);
                }
            });
        }

        try {
            if (episodes) {
                document.querySelector('#widget-dramaseries').addEventListener('click', getLink);
                //-------------iqiyi剧集真实播放页面方法  End------------------
            } else {
                document.querySelector('#widget-dramaseries').removeEventListener('click', getLink);
            }
        } catch(e) {}
    }

    /*  显示增加接口的面板  */
    function showAddApiPanel() {
        if (document.querySelector('#tMuserDefine')) {
            document.querySelector('#tMuserDefine').style.display = "block";
        } else {
            alert(`(● ̄(エ) ̄●)づ\n\n未启用[增加接口]功能\n请把 '▣增加接口'→'☑增加接口'!`);
        }
    }

    /* 勾选自定义接口 */
    function addApiCheck() {
        userApisOn = document.querySelector('#addApiChekBx').checked;
        GMsetValue('userApisOn', userApisOn);
        if(userApisOn) {
            selfDefine();
            setTimeout(showAddApiPanel, 200);
        }
    }

    /*  保存按钮执行函数:获取值并 await GM.setValue()  */
    function getUrls() {
        let userUrl = document.querySelectorAll('.ilink');
        let urlName = document.querySelector('#tMname').value;
        let urlLink = document.querySelector('#tMparseLink').value;
        let urlIntab = document.querySelector('#tMintabckbx').checked ? 1 : 0;
        let urls = [];

        if (urlName || urlLink) {
            urls.push({ name: urlName, link: urlLink, intab: urlIntab });
        }

        for (var i = 0; i < userUrl.length; i++) {
            var n, t, l;
            t = userUrl[i].innerText;
            n = userUrl[i].previousSibling.innerText;
            l = userUrl[i].previousSibling.previousSibling.checked?'1':'0';
            urls.push({ name: n, link: t,intab:l });
        }

        return urls;
    }

    /*  执行  */
    var divTag = document.createElement("div");
    divTag.id = "TMHYd";
    var txt = '', i = 0;

    /*提供的接口列表*/
    for (i in apis) {
        txt += `<li data-order=${i} data-url="${apis[i].url}" data-intab=${apis[i].intab} title="${apis[i].title}" onclick="window.open(this.dataset.url+location.href)">${apis[i].name}</li>`;
    }

    divTag.innerHTML = `
<ul id="TMHYul">
<li class="TM1"><span id="TMList" title="${defaultapi.title}" onclick="window.open(\'${defaultapi.url}\'+window.location.href)">▶</span><ul class="TM3 TM4">${txt}</ul></li>
<li class="TM1"><span id="TMSet">▣</span><ul class="TM3">
<li><label><input type="checkbox" id="intabChekbx">本页解析</label></li>
<li><label><input type="checkbox" id="realLinkChekbx">爱奇艺正确选集</label></li>
<li><input type="checkbox" id="addApiChekBx"><label id="addApiBtn">增加接口</label></li>
<li><label id="intabSettingBtn">本页播放设置</label></li>
</ul></li>
</ul>
`;
    document.body.appendChild(divTag);
    document.querySelector("#addApiChekBx").addEventListener('change', addApiCheck, false);
    // document.querySelector("#addApiChekBx").addEventListener('click', addApiCheck, false);

    GMgetValue('userApisOn',false).then((ag)=>{
        userApisOn = ag;
        document.querySelector("#addApiChekBx").checked = userApisOn;
        /*看看是否需要加载自定义的接口列表*/
        if (userApisOn) {
            GMgetValue('userApis', "[{}]").then((ag1)=>{
                var userApis = JSON.parse(ag1), txt='';
                for (var j in userApis) {
                    try {
                        if (userApis[j].link !== null) {
                            txt += `<li data-order=${j} data-url="${userApis[j].link}"  data-intab=${userApis[j].intab} onclick="window.open(this.dataset.url+location.href)">${userApis[j].name}</li>`;
                        }
                    } catch (e) {/*console.log(e);*/}
                }
                document.querySelector('ul.TM3.TM4').innerHTML = txt + document.querySelector('ul.TM3.TM4').innerHTML;
                selfDefine();
            });
        }
    }).then(() => {
        document.querySelector("#intabChekbx").addEventListener("click", noNewTabCheck, false);
        GMgetValue('replaceRaw',false).then((ag)=>{
            replaceRaw = ag;
            document.querySelector("#intabChekbx").checked = replaceRaw;
            if (replaceRaw) {
                noNewTabCheck();
            }
        });
        document.querySelector("#realLinkChekbx").addEventListener("click", rightEpsLinkCheck, false);
        GMgetValue('episodes',false).then((ag)=>{
            episodes = ag;
            document.querySelector("#realLinkChekbx").checked = episodes;
            if (episodes && window.location.href.indexOf("iqiyi") != -1) {
                rightEpsLinkCheck();
            }
        });
        document.querySelector("#addApiBtn").addEventListener('click', showAddApiPanel, false);
        document.querySelector("#intabSettingBtn").addEventListener('click', intabSetting, false);
    });

    /*  生成增加接口面板  */
    function selfDefine() {
        var a = document.createElement('div');
        a.id = 'tMuserDefine';
        a.setAttribute('class', 'TMHYp');
        a.setAttribute('style', 'display:none');
        var txt = `
<button class="TMHYClose" onclick="document.querySelector('#tMuserDefine').style.display='none';">🗙</button>
<li><span class="TMHYspan120">解析接口名称:</span><input type="text" id="tMname" class="TMHYlti" placeholder="显示的名称"></li>
<li><span class="TMHYspan120">解析接口地址:</span><input type="text" id="tMparseLink" class="TMHYlti" placeholder="接口需要包含 http 或者 https"></li>
<li><span class="TMHYspan80">本页解析:</span><label for="tMintabckbx"><input type="checkbox" id="tMintabckbx"/>适合</label></li>
<li id="tMbtnLi">
<button id="tMgo" onclick="window.open(document.querySelector('#tMparseLink').value+location.href)">测试</button>
<button id="tMadd">增加</button>
<button id="tMsave">保存</button>
</li>`;

        GMgetValue('userApis', "[{}]").then((ag)=>{
            var ar = JSON.parse(ag), d;
            try {
                if (ar[0].name !== undefined) {
                    for (var i = 0; i < ar.length; i++) {
                        d = (ar[i].intab === "1") ? 'checked':'';
                        txt += `<li><span class="idelete" title="删除" onclick="document.getElementById('tMuserDefine').removeChild(this.parentNode)">✘</span><input class="icheck" type="checkbox" ${d}><span class="iname">${ar[i].name}</span><span class="ilink">${ar[i].link}</span></li>`;
                    }
                }
            } catch (e) {}

            a.innerHTML = txt;
            document.body.appendChild(a);

            /*事件绑定*/
            document.querySelector('#tMsave').addEventListener('click', function() {
                var newParseLinks = getUrls();
                GMsetValue('userApis', JSON.stringify(newParseLinks));
                console.log(newParseLinks);
            }, false);

            document.querySelector('#tMadd').addEventListener('click', function() {
                if (document.querySelector('#tMname').value || document.querySelector('#tMparseLink').value) {
                    var isChecked = document.querySelector("#tMintabckbx").checked
                    var b = isChecked ? "1" : "0";
                    var c = isChecked ? "checked" : "";
                    var liTag = document.createElement('li');
                    liTag.innerHTML = `<span class="idelete" title="删除" onclick="document.getElementById('tMuserDefine').removeChild(this.parentNode)">✘</span><input class="icheck" type="checkbox" ${c}><span class="iname">${document.querySelector('#tMname').value}:</span><span class="ilink">${document.querySelector('#tMparseLink').value}</span>`;
                    if (document.querySelector('span[class=iname]') === null) {
                        document.querySelector('#tMuserDefine').appendChild(liTag);
                        document.querySelector('#tMname').value = '';
                        document.querySelector('#tMparseLink').value = '';
                    } else {
                        document.querySelector('#tMuserDefine').insertBefore(liTag, document.querySelector('span[class=iname]').parentNode);
                        document.querySelector('#tMname').value = '';
                        document.querySelector('#tMparseLink').value = '';
                    }
                }
            }, false);
        });
    }

})();