Sleazy Fork is available in English.

含羞草研究所|fi11.com 永久vip vip视频随意观看-

含羞草研究所,可观看含羞草vip視頻 除钻石和付费视频。

// ==UserScript==
// @name         含羞草研究所|fi11.com 永久vip vip视频随意观看-
// @name:zh-TW   含羞草研究所|fi11.com 永久vip vip視頻隨意觀看-
// @namespace    http://tampermonkey.net/
// @version      2.4.0
// @description  含羞草研究所,可观看含羞草vip視頻 除钻石和付费视频。
// @description:zh-tw 含羞草研究所,可观看含羞草vip視頻,除钻石和付费视频。
// @author       FFFFFFeng

// @include *
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// @antifeature payment
// ==/UserScript==

(function () {
    let startnumber = 0;
    let startInterval = setInterval(()=>{
        startnumber ++
        if (localStorage.getItem('preInfo')||localStorage.getItem('search_list')) {
            vipPanelInit()
            clearInterval(startInterval)
        }
        if (startnumber>=40) {
            clearInterval(startInterval)
        }
    },1000)
    let VipPageData = {
        tabIndex: 0,
        localStorageName: "token"
    }
    
    function vipPanelInit() {
        let vipPanel_ = document.getElementById("vipPanel")
        if (vipPanel_) {
            vipPanel_.remove()
        }
        let style = document.createElement("style")
        style.innerHTML = `
        #vipPanel {
            width: 310px;
            height: 500px;
            box-shadow: 0 0 0 1px rgb(0 0 0 / 5%), 0 2px 4px 1px rgb(0 0 0 / 9%);
            border-left: 1px solid transparent;
            border-right: none;
            border-top: 1px solid transparent;
            border-bottom: 1px solid transparent;
            background-color: #FFFFFF;
            position: fixed;
            left: 6px;
            bottom: 6px;
            z-index: 99999;
        }
        .panelHead {
            display: flex;
            border-bottom: 1px solid #ececec;
        }
        .panelHead>div {
            color: #444;
            font-size: 14px;
            padding: 0 10px;
            height: 40px;
            line-height: 40px;
            box-sizing: border-box;
            user-select: none;
            text-align: center;
            width: 76px;
        }
        .panelHead>div:not(.headDivActive):hover {
            border-bottom: 3px solid #ccc;
            cursor: pointer;
        }
        .headDivActive {
            border-bottom: 3px solid #fc6767;
            color: #444;
            font-weight: bold;
        }
        .searchInput {
            width: 80%;
            border-radius: 24px;
            box-shadow: 0 0 0 1px rgb(0 0 0 / 5%), 0 2px 4px 1px rgb(0 0 0 / 9%);
            height: 40px;
            border-left: 1px solid transparent;
            border-right: none;
            border-top: 1px solid transparent;
            border-bottom: 1px solid transparent;
            margin: 0 auto;
            overflow: hidden;
            margin-top: 40px;
            display: flex;
            padding-right: 10px;
            align-items: center;
        }
        .searchInput:hover {
            border-top-left-radius: 24px;
            box-shadow: 0 0 0 1px rgb(0 0 0 / 10%), 0 2px 4px 1px rgb(0 0 0 / 18%);
            border-left: 1px solid transparent;
            border-right: none;
            border-top: 1px solid transparent;
            border-bottom: 1px solid transparent;
        }
        .searchInput input {
            flex: 1;
            height: 100%;
            border: 0;
            outline: 0;
            font-size: 16px;
            padding-left: 10px;
            color: black;
            background-color: #FFFFFF;
        }
        .searchInput .userSearchI {

            width: 30px;
            height: 30px;
            text-align: center;
            box-sizing: border-box;
            line-height: 26px;

        }
        .tipContentBox {
            display:flex;
            color: #71777d;
            font-size: 14px;
            margin: 0 auto;
            margin-top: 20px;
            width: 280px;
        }
        #tipContent {
            width: 0;
            flex: 1;
        }
        .getVipA {
            color: #FFFFFF;
            font-weight: bold;
            background-color: #fc6767;
            height: 100px;
            width: 100px;
            border-radius: 50px;
            text-align: center;
            line-height: 100px;
            margin: 20px auto;
            box-shadow: 0 0 0 1px rgb(0 0 0 / 5%), 0 2px 4px 1px rgb(0 0 0 / 9%);
            user-select: none;
        }
        .getVipA:hover {
            cursor: pointer;
            box-shadow: 0 0 0 0 rgb(0 0 0 / 5%), 0 2px 4px 1px rgb(0 0 0 / 18%);
            -webkit-box-shadow: 0 0 0 0 rgb(0 0 0 / 5%), 0 2px 4px 1px rgb(0 0 0 / 18%);
            -moz-box-shadow: 0 0 0 0 rgba(0,0,0,.05),0 2px 4px 1px rgba(0,0,0,.18);
        }

		@keyframes float {
			0% {
				transform: translateY(0px);
			}
			5% {
				transform: translateY(-10px);
			}
			10%,100% {
				transform: translateY(0px);
			}
		}

		.navy_ {
			position: relative;
		}

		.navy_ span {
			position: relative;
			display: inline-block;
			color: white;
			font-size: 2em;
			animation: float 10s ease-in-out infinite;
			animation-delay: 5s;
		}
        .resolvePro {
            color: #71777d;
            font-size: 14px;
            position: absolute;
            bottom: 10px;
            left: 10px;
        }
        .hiddenPanel {
            left: -310px !important;
        }
        .hiddenBtn,.showBtn {
            position: absolute;
            left: 320px;
            bottom: 20px;
            width: 60px;
            height: 40px;
            line-height: 40px;
            color: #fc6767;
            user-select: none;
            background-color: #FFFFFF;
            position: absolute;
            left: 243px;
            bottom: 20px;
        }
        .showBtn {
            left: 320px;
            display: none;
        }
        .hiddenBtn:hover,.showBtn:hover {
            cursor: pointer;
        }
        .panelBody_1 {
            display: none;
        }
        .panelBody_1 p {
            padding: 0 10px;
            font-size: 14px;
            text-indent: 1em;
        }
        .lplogin {
            color: white;
            width: 100px;
            height: 30px;
            display:flex;
            align-items:center;
            justify-content: center;
            cursor: pointer;
            background-color: #fc6767;
            margin: 20px auto;
            border-radius: 30px;
        }
        .newVersionLink {
             text-decoration: underline;
        }
        `
        document.getElementsByTagName("head")[0].appendChild(style)
        let panel = document.createElement("div")
        panel.setAttribute("id", "vipPanel")
        panel.innerHTML = `
            <div class="hiddenBtn">&lt;&lt;隐藏</div>
            <div class="showBtn">&gt;&gt;显示</div>
            <div class="panelMain">
                <div class="panelHead">
                    <div class="headDivActive">获取权限</div>
                    <div>令牌登录</div>
                    <div>使用指南</div>
                    <div>支付</div>
                </div>
                <div class="panelBody panelBody_0">
                    <div class="searchInput">
                        <input id="txm" type="text" placeholder="">
                        <div class="userSearchI getVipBtn"><i class="el-icon-search"></i></div>
                    </div>
                    <div class="tipContentBox">
                        <span>提示: </span>
                        <span id="tipContent">输入您的卡密以获取vip权限</span>
                    </div>
                    <div class="getVipBtn getVipA navy_">
                        <span>G</span>
                        <span>O</span>
                        <span>!</span>
                    </div>
                    <div class="resolvePro">
                    <a class="newVersionLink" target="_blank" href="https://sleazyfork.org/zh-CN/scripts/441824-%E5%90%AB%E7%BE%9E%E8%8D%89%E7%A0%94%E7%A9%B6%E6%89%80-fi11-com-%E6%B0%B8%E4%B9%85vip-vip%E8%A7%86%E9%A2%91%E9%9A%8F%E6%84%8F%E8%A7%82%E7%9C%8B">点我去最新版本</a><br/>
                        有问题请骚扰邮箱: <br/>
                        JamJamToday@protonmail.com
                    </div>
                </div>
                <div class="panelBody panelBody_1">
                    <div class="searchInput">
                        <input id="lp" type="text" placeholder="请输入令牌">
                        <div class="userSearchI"><i class="el-icon-search"></i></div>
                    </div>
                    <div style="margin-top:20px;text-align:center;"><a class="newVersionLink" href="https://124.223.114.203:3004/hxc.html" target="_blank"  style="color:#71777E;">点此获取令牌</a></div>
                    <div class="lplogin">登录</div>
                </div>
            </div>
        `
        document.body.appendChild(panel)
        let hrefArr = window.location.href.split(".")
        let hrefHeadLength = hrefArr[0].length
        let isH5 = hrefArr[0].substring(hrefHeadLength-2)
        if (isH5 === 'h5') {
            VipPageData.localStorageName = "hxc_A_token"
        }
         let tabs = document.querySelectorAll(".panelHead>div")
         for (let i = 0; i < tabs.length; i++) {
            tabs[i].addEventListener("click", function() {
                if (tabs[i].innerHTML == "最新版本") {
                    toNewVersionF()
                    return
                }
                if (tabs[i].innerHTML == "使用指南") {
                    useMethodF()
                    return
                }
                if (tabs[i].innerHTML == "支付") {
                    toPayPage()
                    return
                }
                for (let ii = 0; ii < tabs.length; ii++) {
                    tabs[ii].className = ""
                }
                tabs[i].className = "headDivActive"
                VipPageData.tabIndex = i
                changeTabF()
            })
        }
        document.querySelector(".hiddenBtn").addEventListener("click", function() {
            hiddenBtnF()
        })
        document.querySelector(".showBtn").addEventListener("click", function() {
            showBtnF()
        })
        document.querySelector(".lplogin").addEventListener("click",function(){
            let lpvalue = document.getElementById("lp").value
            if (lpvalue) {
                saveToken(lpvalue,Date.now())
            }

        })
        if (window.localStorage.getItem("txm") != null && window.localStorage.getItem("txm") != "") {
            document.getElementById("txm").value = window.localStorage.getItem("txm")
        }
        let gets = document.querySelectorAll(".getVipBtn")
        for (let i = 0; i < gets.length; i++) {
            gets[i].addEventListener("click", function() {
                console.log("11")
                if (getTip() == "获取权限中..." || getTip() == "请先登录自己的含羞草账号....") {
                    return
                }
                if (getTxm()) {
                    getPermissionF(getTxm())
                }
            })
        }
        if (isGetPremission()) {
            hiddenBtnF()
            setTip(13)
        } else {
            isLogin()
        }
        initXMLHttpRequest()
    }
    function toPayPage() {
        window.open("http://158.247.243.65:5123?code=YT0yJmI9Mg%3D%3D");
    }
    function changeTabF() {
        let mains = document.querySelectorAll(".panelBody")
        for (let i = 0; i < mains.length; i ++) {
            mains[i].style.display = "none"
        }
        mains[VipPageData.tabIndex].style.display = "block"
    }
    function setTip(str) {
        if (typeof str === "string") {
            document.querySelector("#tipContent").innerHTML = str
            return
        } else {
            if (str == 11) {
                str = "输入您的卡密以获取vip权限"
            } else if (str == 12) {
                str = "请先登录自己的含羞草账号...."
            } else if (str == 13) {
                str = "获取权限成功,不行就重试一次"
            }
            document.querySelector("#tipContent").innerHTML = str
        }
    }
    function getTip() {
        return document.querySelector("#tipContent").innerHTML
    }
    function toNewVersionF() {
        window.open("https://sleazyfork.org/zh-CN/scripts/441824-%E5%90%AB%E7%BE%9E%E8%8D%89%E7%A0%94%E7%A9%B6%E6%89%80-fi11-com-%E6%B0%B8%E4%B9%85vip-vip%E8%A7%86%E9%A2%91%E9%9A%8F%E6%84%8F%E8%A7%82%E7%9C%8B")
    }
    function useMethodF() {
        window.open("http://158.247.243.65:3000/jbs.html#%E5%90%AB%E7%BE%9E%E8%8D%89%E8%84%9A%E6%9C%AC")
    }
    function getPermissionF(t) {
        window.localStorage.setItem("txm", t)
        setTip("获取权限中...")
        let xmlhttp = new XMLHttpRequest()
        xmlhttp.onreadystatechange = function () {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                let res = JSON.parse(xmlhttp.response)
                if (res.code == 300) {
                    setTip(res.msg)
                    return
                }
                if (res.isGetToken) {
                    saveToken(res.token,res.getTokenTime)
                } else {
                    setTip("获取权限失败,请重试")
                }
            } else if (xmlhttp.readyState == 4 && xmlhttp.status != 200) {
                setTip("请求异常,请尝试令牌登录或联系开发者。")
            }
        }
        var url = "https://124.223.114.203:3004/getPermission/" + t + "/190"
        xmlhttp.open("GET", url, true)
        xmlhttp.send()

    }
    function hasGetPermissionF() {

    }
    function saveToken (token,getTokenTime) {
        let local = JSON.parse(
            window.localStorage.getItem(VipPageData.localStorageName)
          )
          local = token
          setTimeout(function () {
                setTip(13)
                window.localStorage.setItem("isGetPermission", true)
                window.localStorage.setItem("getTokenTime", getTokenTime)
            window.localStorage.setItem(
                VipPageData.localStorageName,
              JSON.stringify(local)
            )
              location.reload()
          }, 500)
    }
    function isLogin() {
        let isLoginInterval = setInterval(function(){
            let local = JSON.parse(window.localStorage.getItem(VipPageData.localStorageName))
            if (local) {
                if (isGetPremission()) {
                    setTip(13)
                } else {
                    setTip(11)
                }
                console.log("islogin")
                clearInterval(isLoginInterval)
            } else {
                setTip(12)
                window.localStorage.setItem("isGetPermission", false)
            }
           
        },500)
    }
    function isGetPremission() {
        let get = window.localStorage.getItem("isGetPermission")
        if (get === "true" || get === true) {
            get = true
        } else {
            get = false
        }
        console.log(get, "get")
        let local = window.localStorage.getItem(VipPageData.localStorageName)
        let localb = false
        if (local) {
                localb = true
            } else {
                localb = false
            }
        console.log(localb, "localb")
        if (!(localb && get)) {
            window.localStorage.setItem("isGetPermission", false)
        }
        return localb && get
    }
    function getTxm() {
        console.log("222")
        if (!document.getElementById("txm").value) {
            if (getTip().includes("输入您的卡密 ")) {
                setTip(getTip()+"!!! ")
            } else {
                setTip("输入您的卡密 ")
            }
            if(getTip().includes("!!! !!! !!! !!!")) {
                setTip("输入您的卡密 ")
            }
            return false
        } else {
            return document.getElementById("txm").value
        }
    }
    function hiddenBtnF() {
        document.querySelector(".hiddenBtn").style.display = "none"
        document.querySelector("#vipPanel").className = "hiddenPanel"
        document.querySelector(".showBtn").style.display = "block"
    }
    function showBtnF() {
        document.querySelector(".hiddenBtn").style.display = "block"
        document.querySelector("#vipPanel").className = ""
        document.querySelector(".showBtn").style.display = "none"
    }
    class XMLHttp {
        request = function (param) {};
        response = function (param) {};
      }
      let http = new XMLHttp();

	function initXMLHttpRequest() {
        let open = XMLHttpRequest.prototype.open;
          XMLHttpRequest.prototype.open = function(...args){
            let send = this.send;
            let _this = this
            let post_data = []
            this.send = function (...data) {
              post_data = data;
              return send.apply(_this, data)
            }

            http.request(args)

            this.addEventListener('readystatechange', function () {
              if (this.readyState === 4) {
                let config = {
                  url: args[1],
                  status: this.status,
                  method: args[0],
                  data: post_data
                }
                // 请求后拦截

                http.response({config, response: this.response})
              }
            }, false)
            return open.apply(this, args);
          }
      }


        http.request = function (param) {
           if (/.*\.m3u8.*/g.test(param[1])) {
               if (/.*hls.*/g.test(param[1])) {
                   console.log(param, "---request");
                   let name = document.querySelectorAll("div.space-y-3")[0]
                   let appName = document.querySelectorAll("div.g-m-t-8[more]")[0]
                   let dom
                   if (name) {
                       dom = name

                   } else {
                       dom = appName
                   }
                   console.log("dom",dom)
                   if (dom) {
                       let div = document.createElement("div")
                       div.innerHTML = "<div id='getLink' style='height:30px;font-size:20px;line-height:30px;padding:5px 10px;border-radius:20px;background-color:#990033;color:white;text-align:center;cursor:pointer;'>检测到m3u8链接点击复制</div>"
                       dom.parentNode.insertBefore(div,dom)
                       div.addEventListener("click", function() {
                           let input = document.createElement("input")
                           input.setAttribute("type","text")
                           input.setAttribute("value",param[1])
                           input.setAttribute("style","position:absolute;left:0;top:0;z-Index:-1;")
                           document.querySelectorAll("#app")[0].appendChild(input)
                           input.select();
                           document.execCommand("copy");
                           document.getElementById("getLink").innerHTML = "复制成功,即将跳转至下载页面。"


                           setTimeout(function(){
                               window.open("http://blog.luckly-mjw.cn/tool-show/m3u8-downloader/index.html")
                               document.getElementById("getLink").innerHTML = "检测到m3u8链接点击复制"
                           },800)
                       })
                   } else {
                       console.log("没有找到元素")
                   }
               }
           }
        };
        http.response = function (res) {
            //console.log(res, "---response");
        }
})();