Greasy Fork

Greasy Fork is available in English.

[新]全网VIP视频免费破解去广告,支持电视剧免跳出选集、知乎使用增强、B站哔哩哔哩使用增强、全网音乐直接下载、百度文库下载等多合一纯净脚本

【组合型多功能脚本,完全免费】【1】全网VIP视频免费破解去广告(支持自定义接口):支持爱奇艺、腾讯、芒果、优酷、哔哩哔哩等;【2】知乎使用增强:外链接直接跳出、问题,回答时间标注、短视频下载方便保存等;【3】B站哔哩哔哩使用增强、番剧大会员VIP视频解析、视频下载、一键三联、浏览记录提醒;【4】全网音乐有声音频免客户端下载,支持网易云音乐、QQ音乐、酷狗、喜马拉雅、咪咕等;【5】优惠券查询

目前为 2022-01-26 提交的版本,查看 最新版本

// ==UserScript==
// @name         [新]全网VIP视频免费破解去广告,支持电视剧免跳出选集、知乎使用增强、B站哔哩哔哩使用增强、全网音乐直接下载、百度文库下载等多合一纯净脚本
// @namespace    coolhii_vip
// @version      4.1.0
// @description  【组合型多功能脚本,完全免费】【1】全网VIP视频免费破解去广告(支持自定义接口):支持爱奇艺、腾讯、芒果、优酷、哔哩哔哩等;【2】知乎使用增强:外链接直接跳出、问题,回答时间标注、短视频下载方便保存等;【3】B站哔哩哔哩使用增强、番剧大会员VIP视频解析、视频下载、一键三联、浏览记录提醒;【4】全网音乐有声音频免客户端下载,支持网易云音乐、QQ音乐、酷狗、喜马拉雅、咪咕等;【5】优惠券查询
// @author       橘子爱哭,爱画画的猫
// @icon         data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAE7ElEQVRoQ+2ZTWwbRRTH/2+dqKGoTZu1AwlIgFRxAw5cQEIoIC5IwIUDghO0u1tQqLJOaYoSYm/itEWkJGsCKKxNyAkkOMCJE1IKJ7hUqsSJDymgCkT8EdSKiHx4H7KdTdeb/fA6zpfInizNzHv/37wZz7w3hG364nL+KWYeLpsnotRkJvrNdriiZhtV5YWnwcIwCI/abTPwfYSF1ES24+tm+mwaQJ+ce04AJRh4OEDgVRBSuhH9qhkgWwbolwvPm0AS4AdCCSL6kYHRtCF+EWqco3PDAKpUfBFkagDu34oAgH8mimiTRsenjdgJDaDKCy8DQhLAvY049BkzD5gjeqZzNozd0ACW8biUU5ioDNIdxqGzLwN/AKylM7FMI3YaBrCc9Sn514nLIBwNJ4DzDEqmM9EPw42r7b1lgI2IKIU4gzUwjgYIukGgxGRGTG9FuDU2NIAq5XpKEH6ZyorX3QSoSnGA2BxhoM3eTsC/JnMinY2Nu40bkAp3r8A8oWdjV8KANQQAojkQGS3C6vDl6TsX3Bz2yQtvESIjlTbihG5EL7j1e+PVm52l0soYg2UwP7FzALfUTGE1ktBnj/8dZuZUdfEYlkpjYPRujNslgHX/dPkYLSc1o3vJD0RT+PAi58cIFN/Ub3cBqnKIcLG9W0xqGq3ZBWoatyxeL6SI8KYn4F4AsC2HET0bK5/UUKWchuqZ4f8dAATNUHU2eyr/QkEf80EEguaosufq6WTvs+8jcPbU4j0loZQAcNIXPvQSopmIKYy++/Hx38JMaugIWMZVJdcFk8qp42uuDusEIGCa6bZR3bj9zzDCrb4NA1gGentviC0rq0MErj2YAgCI6L221tbRSx8cLTQiPDRA/NTCCRbwmFfCMXAyd2Q1QkMMnK8Y9wAgovHWNTP1zkzsppvwuFR4hVtW5vTprvl6wAIj0Cf99SAJLYNgfmHdoG/mdOYMH4osF4dgmqb9ICOiyFqbODY1RctuwlQp3wvCoC1BmhXAlyYysZ/8QDwB+qXCI6bAg2A862GgDJLSM50zbu3MTETE1WDc+u3sG5eK55hM1SezmxWEkj7x0R3X3PxsAlCl/JMQoPoId9qZJ2C8/S7RcN5/vGZOUbj1sJkfApEcIiWdZcJ02oj+YLe7AdAvF58xyVRCCN8EwszvHzJheK3v80qxfdksxUMKd/jhz8AwrLyBmiDcCfI7CEZp9ZAx9cmRXLlRVf7pgrl0emvCa90Q8CUEMvY/gMXVhEjM78oScsZ/325iJ8i++RtV5fzc+qnpWs7YqwfZ+q04Saqcrxw2AK74geyVq4QlHEBPWbQdwFpFviDOpbZTlzmn8I3LnC0CTm2+IDt1nfYSXg+Aa0R2KqEJEh4GwHk1rjOpJ03PipXSoioVkiCulFh8P1tZpd5SjNse2Oyj9m5/AOAZhf9nBKTCtyB+PGBt2otUDSyh8KXFuvYA83eVfKBykUNpDKCHXEFC7IFmFXcDAK4KLAyXH81rMrK4knsJLJQfG+6rAakLoLnldQ+AXwk0OJkRP9/4G3Wb8T4ld5qYLgLoqLT7A2zLA0cNAKMAogE9I27Kv32rEnEld5YhvA3TvGCrMFT3QMATU9BfvtXu9cS0DjAEpnN6VtS97AWWVaoHUU6zA/g98tUr3NnP+chXPvysg9DPZl0AjYraiXH/ARKAvXii7yqAAAAAAElFTkSuQmCC
// @include      *://wenku.baidu.com/*
// @include      *://*.youku.com/v_*
// @include      *://*.iqiyi.com/v_*
// @include      *://*.iqiyi.com/w_*
// @include      *://*.iqiyi.com/a_*
// @include      *://*.le.com/ptv/vplay/*
// @include      *://v.qq.com/x/cover/*
// @include      *://v.qq.com/x/page/*
// @include      *://*.tudou.com/listplay/*
// @include      *://*.tudou.com/albumplay/*
// @include      *://*.tudou.com/programs/view/*
// @include      *://*.mgtv.com/b/*
// @include      *://film.sohu.com/album/*
// @include      *://tv.sohu.com/v/*
// @include      *://*.baofeng.com/play/*.
// @include      *://vip.pptv.com/show/*
// @include      *://v.pptv.com/show/*
// @include      *music.163.com*
// @include      *://y.qq.com*
// @include      *://www.kugou.com*
// @include      *://www.kuwo.cn*
// @include      *://www.lizhi.fm*
// @include      *://*.ximalaya.com*
// @include      *://music.migu.cn*
// @include      *://item.taobao.com/*
// @include      *://*detail.tmall.com/*
// @include      *://*detail.tmall.hk/*
// @include      *://*product.suning.com/*
// @include      *://*item.jd.com/*
// @include      *://item.yiyaojd.com/*
// @include      *://npcitem.jd.hk/*
// @include      *://*detail.vip.com/*
// @include      *://*mobile.yangkeduo.com/goods*
// @include      *://*.zhihu.com/*
// @include      *://v.vzuu.com/video/*
// @include      *://video.zhihu.com/video/*
// @include	   	 *://www.bilibili.com/**
// @include      *://search.bilibili.com/**
// @include      *://space.bilibili.com/**
// @connect      api.bilibili.com
// @connect      pcw-api.iqiyi.com
// @connect      zhihu.com
// @connect      vzuu.com
// @connect      t.mimixiaoke.com
// @connect      t.jtm.pub
// @grant        GM_xmlhttpRequest
// @grant        GM_getResourceText
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        GM_openInTab
// @grant        GM_download
// @grant        GM_info
// @grant    	 GM_registerMenuCommand
// @require      https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/3.2.1/jquery.min.js
// @run-at       document-idle
// @charset		 UTF-8
// @license      AGPL License
// @original-script http://greasyfork.icu/zh-CN/scripts/418804
// @original-author 爱画画的猫
// @original-license AGPL License
// @original-changes 已经获得原作者的完全授权,在源码使用出也做了相应版权说明,特此申明
// @antifeature  referral-link
// ==/UserScript==

(function() {
	
	'use strict';
	
	/*
	*	VIP解析部分代码借鉴以下脚本,哔哩哔哩部分代码
	*	脚本地址:http://greasyfork.icu/zh-CN/scripts/418804
	*	作者:爱画画的猫,代码已经授权,在原作者的基础上优化了代码逻辑,修复了部分bug
	*/
	function ToolObject(){
		this.GMgetValue = function (name, value) {
			if (typeof GM_getValue === "function") {
				return GM_getValue(name, value);
			} else {
				return GM.getValue(name, value);
			}
		};
		this.GMsetValue = function(name, value){
			if (typeof GM_setValue === "function") {
				return GM_setValue(name, value);
			} else {
				return GM.setValue(name, value);
			}
		};
		this.GMaddStyle = function(css){
			var myStyle = document.createElement('style');
			myStyle.textContent = css;
			var doc = document.head || document.documentElement;
			doc.appendChild(myStyle);
		};
		this.GMopenInTab = function(url, open_in_background){
			if (typeof GM_openInTab === "function") {
				GM_openInTab(url, open_in_background);
			} else {
				GM.openInTab(url, open_in_background);
			}
		};
		this.addScript = function(url){
			var s = document.createElement('script');
			s.setAttribute('src',url);
			document.body.appendChild(s);
		};
		this.randomNumber = function(){
			return Math.ceil(Math.random()*100000000);
		};
		this.request = function(mothed, url, param){
			return new Promise(function(resolve, reject){
				GM_xmlhttpRequest({
					url: url,
					method: mothed,
					data:param,
					onload: function(response) {
						var status = response.status;
						var playurl = "";
						if(status==200||status=='200'){
							var responseText = response.responseText;
							resolve({"result":"success", "data":responseText});
						}else{
							reject({"result":"error", "data":null});
						}
					}
				});
			})
		};
		this.getBilibiliBV=function(){
			var pathname = window.location.pathname;
			var bv = pathname.replace("/video/","").replace("/","");
			return bv;
		}
	}
	
	//全局统一变量
	const toolObject = new ToolObject();
	const window_url = window.location.href;
	const window_host = window.location.host;
	
	const coolhiiVIPVideo={};
	coolhiiVIPVideo.eleId = Math.ceil(Math.random()*100000000);
	coolhiiVIPVideo.analysisWebsite="https://www.xixicai.top/mov/s/?sv=1&url=";
	coolhiiVIPVideo.defaultSourceArray=[
		{"name":"纯净/B站","category":"1","url":"https://z1.m1907.cn/?jx="},
		{"name":"高速接口","category":"1","url":"https://jsap.attakids.com/?url="},
		{"name":"综合/B站1","category":"1","url":"https://vip.parwix.com:4433/player/?url="},
		{"name":"OK解析","category":"1","url":"https://okjx.cc/?url="},
		{"name":"乐多资源","category":"1","url":"https://api.leduotv.com/wp-api/ifr.php?isDp=1&vid="},
		{"name":"虾米","category":"1","url":"https://jx.xmflv.com/?url="},
		{"name":"全民","category":"1","url":"https://jx.quanmingjiexi.com/?url="},
		{"name":"七哥","category":"1","url":"https://jx.mmkv.cn/tv.php?url="},
		{"name":"冰豆","category":"1","url":"https://api.qianqi.net/vip/?url="},
		{"name":"诺诺","category":"1","url":"https://www.ckmov.com/?url="},
		{"name":"迪奥","category":"1","url":"https://123.1dior.cn/?url="},
		{"name":"CK","category":"1","url":"https://www.ckplayer.vip/jiexi/?url="},
		{"name":"LE","category":"1","url":"https://lecurl.cn/?url="},
		{"name":"ckmov","category":"1","url":"https://www.ckmov.vip/api.php?url="},
		{"name":"ccyjjd","category":"1","url":"https://ckmov.ccyjjd.com/ckmov/?url="},
		{"name":"RDHK","category":"1","url":"https://jx.rdhk.net/?v="},
		{"name":"爱豆","category":"1","url":"https://jx.aidouer.net/?url="},
		{"name":"H8","category":"1","url":"https://www.h8jx.com/jiexi.php?url="},
		{"name":"BL","category":"1","url":"https://vip.bljiex.com/?v="},
		{"name":"解析la","category":"1","url":"https://api.jiexi.la/?url="},
		{"name":"MUTV","category":"1","url":"https://jiexi.janan.net/jiexi/?url="},
		{"name":"MAO","category":"1","url":"https://www.mtosz.com/m3u8.php?url="},
		{"name":"老板","category":"1","url":"https://vip.laobandq.com/jiexi.php?url="},
		{"name":"盘古","category":"1","url":"https://www.pangujiexi.cc/jiexi.php?url="},
		{"name":"盖世","category":"1","url":"https://www.gai4.com/?url="},
		{"name":"小蒋","category":"1","url":"https://www.kpezp.cn/jlexi.php?url="},
		{"name":"YiTV","category":"1","url":"https://jiexi.us/?url="},
		{"name":"星空","category":"1","url":"http://60jx.com/?url="},
		{"name":"0523","category":"1","url":"https://go.yh0523.cn/y.cy?url="},
		{"name":"17K云","category":"1","url":"https://17kyun.com/api.php?url="},
		{"name":"4K","category":"1","url":"https://jx.4kdv.com/?url="},
		{"name":"云析","category":"1","url":"https://jx.yparse.com/index.php?url="},
		{"name":"8090","category":"1","url":"https://www.8090g.cn/?url="},
		{"name":"江湖","category":"1","url":"https://api.jhdyw.vip/?url="},
		{"name":"诺讯","category":"1","url":"https://www.nxflv.com/?url="},
		{"name":"PM","category":"1","url":"https://www.playm3u8.cn/jiexi.php?url="},
		{"name":"奇米","category":"1","url":"https://qimihe.com/?url="},
		{"name":"思云","category":"1","url":"https://jx.ap2p.cn/?url="},
		{"name":"听乐","category":"1","url":"https://jx.dj6u.com/?url="},
		{"name":"aijx","category":"1","url":"https://jiexi.t7g.cn/?url="},
		{"name":"夜幕","category":"1","url":"https://www.yemu.xyz/?url="},
		{"name":"52","category":"1","url":"https://vip.52jiexi.top/?url="},
		{"name":"黑米","category":"1","url":"https://www.myxin.top/jx/api/?url="},
		{"name":"豪华啦","category":"1","url":"https://api.lhh.la/vip/?url="},
		{"name":"凉城","category":"1","url":"https://jx.mw0.cc/?url="},
		{"name":"33t","category":"1","url":"https://www.33tn.cn/?url="},
		{"name":"180","category":"1","url":"https://jx.000180.top/jx/?url="},
		{"name":"无名","category":"1","url":"https://www.administratorw.com/video.php?url="},
		{"name":"黑云","category":"1","url":"https://jiexi.380k.com/?url="},
		{"name":"九八","category":"1","url":"https://jx.youyitv.com/?url="},
	];
	coolhiiVIPVideo.iframePlayerNodes = [
		{ url:"v.qq.com", node:"#mod_player"},
		{ url:"www.iqiyi.com", node:"#flashbox"},
		{ url:"v.youku.com", node:"#player"},
		{ url:"w.mgtv.com", node:"#mgtv-player-wrap"},
		{ url:"www.mgtv.com", node:"#mgtv-player-wrap"},
		{ url:"tv.sohu.com", node:"#player"},
		{ url:"film.sohu.com", node:"#playerWrap"},
		{ url:"www.le.com", node:"#le_playbox"},
		{ url:"video.tudou.com", node:".td-playbox"},
		{ url:"v.pptv.com", node:"#pptv_playpage_box"},
		{ url:"vip.pptv.com", node:".w-video"},
		{ url:"www.wasu.cn", node:"#flashContent"},
		{ url:"www.acfun.cn", node:"#ACPlayer"},
		{ url:"vip.1905.com", node:"#player"},
		{url:"play.tudou.com",node:"#player"},
		{url:"www.bilibili.com/video",node:"#bilibiliPlayer"},
		{url:"www.bilibili.com/bangumi",node:"#player_module"},
	];
	coolhiiVIPVideo.judgeVipWebsite=function(){
		var urls = ["www.iqiyi.com","v.qq.com","youku.com", "www.le.com","mgtv.com","sohu.com", "acfun.cn","bilibili.com","baofeng.com","pptv.com"];
		var result = false;
		for(var i=0; i<urls.length;i++){
			if(window.location.host.indexOf("bilibili.com")==-1){ //不是B站直接判断
				if(window.location.host.indexOf(urls[i])!=-1){
					result = true;
				}
			}else{ //是B站只有番剧才开启VIP解析
				if(window.location.href.indexOf("www.bilibili.com/bangumi/play")!=-1){
					result = true;
				}
			}
		}
		return result;
	};
	coolhiiVIPVideo.addStyle=function(){
		var themeColor = "#FF5C31";
		var innnerCss = "";
		innnerCss += "#plugin_coolhii_analysis_vip_"+this.eleId+"{position:fixed; top:160px; left:0px; width:25px; z-index:99999999999999;}";
		innnerCss += "#plugin_coolhii_analysis_vip_"+this.eleId+" .vip_analysis_interface_box{position:relative;}";
		
		innnerCss += "#plugin_coolhii_analysis_vip_"+this.eleId+" .plugin_item{cursor:pointer;text-align:center;}";
		innnerCss += "#plugin_coolhii_analysis_vip_"+this.eleId+" .jump_analysis_666666 >img{width:100%; display: inline-block; vertical-align: middle;}";
		
		innnerCss += "#plugin_coolhii_analysis_vip_"+this.eleId+" .setting_analysis_666666{height:25px;line-height:25px;margin-top:5px;background-color:"+themeColor+";border-radius:4px;}";
		innnerCss += "#plugin_coolhii_analysis_vip_"+this.eleId+" .setting_analysis_666666 >img{width:80%; display: inline-block; vertical-align: middle;}";
		
		innnerCss += "#plugin_coolhii_analysis_vip_"+this.eleId+" .select_interface_box_outer{display:none;position:absolute;top:-60px;left:25px;padding:5px;}";
		innnerCss += "#plugin_coolhii_analysis_vip_"+this.eleId+" .select_interface_box{width:300px;height:350px;background-color:rgba(241,241,241,0.8);overflow-y:auto;border-radius:4px;}";
		innnerCss += "#plugin_coolhii_analysis_vip_"+this.eleId+" .select_interface_box::-webkit-scrollbar{width:5px; height:1px;}";
		innnerCss += "#plugin_coolhii_analysis_vip_"+this.eleId+" .select_interface_box::-webkit-scrollbar-thumb{border-radius: 4px;box-shadow:inset 0 0 5px rgba(0, 0, 0, 0.2); background:#A8A8A8;}";
		innnerCss += "#plugin_coolhii_analysis_vip_"+this.eleId+" .select_interface_box::-webkit-scrollbar-track{border-radius: 4px;box-shadow:inset 0 0 5px rgba(0, 0, 0, 0.2); background:#F1F1F1;}";
		
		innnerCss += "#plugin_coolhii_analysis_vip_"+this.eleId+" .select_interface_box >span{border-radius:3px;border-top:3px solid "+themeColor+"; border-bottom:3px solid "+themeColor+";display:inline-block;width:calc(25% - 6px);width:-moz-calc(25% - 6px);width: -webkit-calc(25% - 6px);height:20px;line-height:20px;background-color:"+themeColor+";color:#FFF;cursor:pointer;margin:3px;text-align:center;overflow:hidden;white-space: nowrap;text-overflow: ellipsis;-o-text-overflow:ellipsis;font-size:12px!important;}";
		innnerCss += "#plugin_coolhii_analysis_vip_"+this.eleId+" .select_interface_box >span:hover{border-top:3px solid #FFF; border-bottom:3px solid #FFF;}";
		innnerCss += "#plugin_coolhii_analysis_vip_"+this.eleId+" .select_interface_box >span.hover-mark{border-top:3px solid #FFF; border-bottom:3px solid #FFF;}";
		
		$("body").prepend("<style>"+innnerCss+"</style>");
	};
	coolhiiVIPVideo.generateHtml=function(){
		var interfaceHtml = "";
		for(var i=0; i<this.defaultSourceArray.length; i++){
			var obj = this.defaultSourceArray[i];
			interfaceHtml += "<span data-url='"+obj.url+"'>"+obj.name+"</span>";
		}
		var vipBase64Image = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAABgCAYAAABbjPFwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAaFSURBVHhe7ZwLbBVFFIb/W0AEDFTeLYK0VBKgUh6KFDEgtvJWQYMGRSEKmKoRIQoCRnyAYhREFC1orBowiiKmhooUJVJFBOSRAAEUKE95tRUCigL1HOYslIa9O3d39u69Sb9kszNnb5v5Z2fOnHncG4JQnoOmOIPHKdmXrnZ01WR7DFGCEArpviCUi6+VCWQiykdSoUNYQMlEzscBP9A1PDQXexLO13x8FZ65la45nEiQZhNPhbfoXz4aAxMowW0+PinHUBbAHTZeyWIBseZtIqEhC4hrYlvAlXUlYU9sCmiTBQybB2SPFYM9sSOgcRr5w4nAcxuBMcuA7o/Ig/AEK6A6+Y8uQ4GcxcBLO4C7pgLXtJeHegQjIO1mYMibwLTdwMPzgYw75UHkRE9A/RbAbWOA8T8DTxdR+kmgXlN56B5/BYQoVux0t6rlqTup1mcCqZny0Az+CGjZBRj0imrXo79Q7Tyhmjw0izkB9ZKAHjnKgzy7GugzAWjUSh76R6h8FIVEXmg/EOg4SDUVjYHHkXNngELq4MupuZUdEKM97gQ07wB0oEJzwZtdL0aPbF+hCr7xwmRLi8gEtB8A3DJK1boJTp9UNb1kGvDf32KMDD0BSW2Bwa+aK/jmpcC39P+41j2iJ2DCL0DKTZJxycljwNLX1GUQPS9Ut4kkXLB+EfBiBjC2ofHCM3oCVn0kCU3K9gOfjKQxgAay98g77d8kD8yjJyB/ConIk4wGO1YCv9MVBfQHsrwR5ObIY+hw433ApN+A3s+IwT+qTekMql5NtpD34PgmrTvdHbRXq0ETk2yg7e1AyV7gKMVCPuBuIGvVDeg3CUjvJwYNVrwDfEUTln+Oi8EM7gRYcEjMQq5qJAYHSvep/vTTB2LwjjcBTFIbJaLL/WLQYFM+sIiCvYNbxOAe7wIsMh8kIZNpbnudGDTgt/HNC5JxhzkBTL1kEkHtvOdjYtBgH03ivxyvHIQLzAqwyLhDNSue2OhSRP1i4diIO7k/Apgr6gB9qZ1zs9LlZAm9DRo7Iujk/gmwaN1DrffweKALR6v8NjQ6uf8CLLLHqWZV+2oxaMAdnDt6GPRDCa8sewOY0QtY+5kYzBA9AczeDcA8ipM4UjUUWkRXgEXR+8DMLODHXDG4JxgBzNFdwPxHgblDgD0UubokOAEW6xaqt+FytqYnYMDzwA1UU83Syb/XEqNBTpVSbESj8azewDbeAtZHz40OJFfGIipyaJvy0we3qvsR6pSlFPdzxOkFnmfwqh5f7LkcYiU9AVx4FqELexhLGLd1ntCU7lF3rm0dUigM4fmGwzjg/g24hd8Sizu2+1JhJXI/+698UI/oCwjH8UMkoviiIA4nHAjeC1WE1584guWF4qynxBie2BLgAn0Bqz5W6z1evYxh3EWjTVoDDVOABnTx/cKVCtSpLx8yAK/sOeBOQDh4M49Xs3myz4IqCqwR4SAYiIBwcCdlYU1FIF+8DdWgpXygEsYEtOikJt/nzorBB2olXhRlvcHZ/eWhPZGNAzzI7FwN7KKreI0KH478oT+6+kBkAuxgz8SiDm+/KIrDiWM0KPmMGQF2HCJBaz61j2da9/S8zeTvQMbu1okRNL542AQPfiTuOkztJTTvKIbIiI1Qgo/YTCYRmQ+JQZ/YioWG5wH3vC4ZPfQEfD8bmJ4JfEg1tORlYO3nwN71aqPaNLwANuY7+8GtEt5G4sRkoDF11HFh5rHhVtfYC9n9Lc8NeP2I9xLC4K0JaRzGcA2HHdd2low9sdUHXFAlIGiqBARNlYCgqRIQNFUCgsa7gBOHJREM3gUEvNToXQCfbeDtUzva9ZHEZahZWxLuMdMHeKPODj5v2usJyVQiksMgNpgR4HRU5t63gMHTL51lGdo08TYjq8gDuepctRPWOhDPxpx4dxCwYbFkLo+ZN8CsnCsJB7jgOoU/VQZsXSYZe8wJKF6nL0KHXxdoLRqYE8AsnwUc2CwZD5w4AhTOkEx4zArgfWE+++BVxOKJaoFYA7MCGEtEONcaDl6G4dMsmpjzQpej2wj1lUI+6esEe6d8KnyEq9X+CrDg79qk9wdSuwLJlb5/bXV+lw4gOgIqwht9fDi2eg21MPbXQXngjugLMIz5ThxlWMBplYxLTrMAAyNPYGxmAQUqHZcUhORHYbZSJt5+3aMM1dEmITQHf5IfGnreED+UcZm57BcOI8TBz/Ows+H+WkA1//b5igfwP4DBAodXyDR7AAAAAElFTkSuQmCC";
		var html=
			`
			<div id='plugin_coolhii_analysis_vip_`+this.eleId+`'>
				<div class="vip_analysis_interface_box">
					<div class='plugin_item jump_analysis_666666' title='点我!跳转综合VIP视频解析,电视剧可免跳出选集'><img src='`+vipBase64Image+`'></div>
					<div class="select_interface_box_outer">					
						<div class='select_interface_box'>
							`+interfaceHtml+`
						</div>;
					</div>
				</div>
			</div>
			`;
		$("body").append(html);
	};
	coolhiiVIPVideo.operation=function(){		
		$("body").on("click", "#plugin_coolhii_analysis_vip_"+coolhiiVIPVideo.eleId+" .jump_analysis_666666", function(){
			var jumpWebsite = coolhiiVIPVideo.analysisWebsite + window_url;
			GM_openInTab(jumpWebsite, {active:true});
		});
		
		$("body").on("click", "#plugin_coolhii_analysis_vip_"+coolhiiVIPVideo.eleId+" .setting_analysis_666666", function(){
			alert("1");
		});
		
		$("body").on("click", "#plugin_coolhii_analysis_vip_"+coolhiiVIPVideo.eleId+" .select_interface_box>span", function(){
			var node = "";
			var iframePlayerNodes = coolhiiVIPVideo.iframePlayerNodes;
			for(var m in iframePlayerNodes) {
				var playUrl = window.location.href;
				if(playUrl.indexOf(iframePlayerNodes[m].url)!= -1){
					node = iframePlayerNodes[m].node;
				}
			}
			
			//标记点击过的接口
			$("#plugin_coolhii_analysis_vip_"+coolhiiVIPVideo.eleId+" .select_interface_box>span").removeClass("hover-mark");
			$(this).addClass("hover-mark");
			
			$("#play-iframe-outer-7788OP-99999900-99999900OOO").remove();
			var playUrl = window.location.href;
			var playHtml = "<div id='play-iframe-outer-7788OP-99999900OOO' style='width:100%;height:100%;'><iframe allowtransparency=true frameborder='0' scrolling='no' allowfullscreen=true allowtransparency=true name='jx_play' style='height:100%;width:100%' id='play-iframe-6677i9999999666666'></iframe></div>";
			$(node).html(playHtml);
			var iframeSrc= $(this).attr("data-url")+playUrl;
			$("#play-iframe-6677i9999999666666").attr("src", iframeSrc);
		});
		
		var $vipMovieBox = $("#plugin_coolhii_analysis_vip_"+coolhiiVIPVideo.eleId+" .vip_analysis_interface_box");
		var $playSourceBox = $("#plugin_coolhii_analysis_vip_"+coolhiiVIPVideo.eleId+" .select_interface_box_outer");
		$vipMovieBox.on("mouseover", () => {
			$playSourceBox.show();
		});
		$vipMovieBox.on("mouseout", () => {
			$playSourceBox.hide();
		});
	};
	//借鉴脚本作者:lanhaha , 版权归原作者所有
	//地址:http://greasyfork.icu/zh-CN/scripts/370634
	//修改:优化了该段代码的逻辑,使可读性更高
	coolhiiVIPVideo.pageEventExtend = function(){
		var window_url = window.location.href;
		if(window_url.indexOf('v.qq.com/x/cover') != -1){
			$("body").on('mouseover', '.item a', function(e) {
				let $playerItem = $(this), href = $playerItem.attr('href') || $playerItem.data("href");
				$playerItem.off('click.chrome');
				$playerItem.on('click.chrome', function() {
					window.location.href = href
				}).attr('data-href', href).css({
					cursor: 'pointer'
				}).removeAttr('href')
			})
		}else if(window_url.indexOf('iqiyi.com/v_') != -1){
			
			function remove(selector) {
				if (!document.querySelectorAll) {
					return;
				}
				var nodes = document.querySelectorAll(selector);
				if (nodes) {
					for (var i = 0; i < nodes.length; i++) {
						if (nodes[i] && nodes[i].parentNode) {
							nodes[i].parentNode.removeChild(nodes[i]);
						}
					}
				}
			};
			
			function removeObj(targetSelector, rootSelector = 'body', wait) {
				const rootElement = document.querySelector(rootSelector);
				const targetElement = rootElement.querySelector(targetSelector);
				if (targetElement) {
					return Promise.resolve(targetElement)
				}
				return new Promise((resolve, reject) => {
					const callback = function(matationList, observer) {
						const targetElement = rootElement.querySelector(targetSelector);
						if (targetElement) {
							resolve(targetElement);
							observer.disconnect()
						}
					};
					const observer = new MutationObserver(callback);
					observer.observe(rootElement, {
						subtree: true,
						childList: true
					});
					if (wait !== undefined) {
						setTimeout(() => {
							observer.disconnect()
						}, wait)
					}
				})
			};
								
			async function removeAll(targetSelector, rootSelector, now = false) {
				if (now) {
					const parent = rootSelector ? document.querySelector(rootSelector) : document;
					if (parent) {
						const target = parent.querySelector(targetSelector);
						if (target) {
							target.remove();
							return true
						}
					}
					return false
				}
				const target = await removeObj(targetSelector, rootSelector);
				target.remove()
			};
			
			setTimeout(()=>{
				remove('div#scrollTip,.qy-glide,#qy-glide,[class^="qy-glide"],[id^="qy-glide"],svg[display="none"][aria-hidden="true"],div[class*="player-side-ear"],div[class^="player-mnb"][data-asyn-pb]');
				removeAll('div[style*="visibility"][style*="visible"]:not([class]):not([id]):not([style*="fixed"])', undefined, false);
			},1000);
			
			$('div[style*="visibility"][style*="visible"]:not([class]):not([id]):not([style*="fixed"])').hide();
			
			$("body").on('mouseover', 'ul li [href*="/v_"][href*=".html"]:not([href*="=http"]):not([href*="?http"]):not([href*="#http"])', function(e) {
				let $playerItem = $(this), href = $playerItem.attr('href') || $playerItem.data("href");
				$playerItem.off('click.chrome');
				$playerItem.on('click.chrome', function() {
					window.location.href = href
				}).attr('data-href', href).css({
					cursor: 'pointer'
				}).removeAttr('href')
			});
		}else if(window_url.indexOf('bilibili.com/bangumi/') != -1){
				$("body").on('mouseover', '.ep-item a', function(e) {
					let $playerItem = $(this), href = $playerItem.attr('href') || $playerItem.data("href");
					$playerItem.off('click.chrome');
					$playerItem.on('click.chrome', function() {
						window.location.href = href
					}).attr('data-href', href).css({
						cursor: 'pointer'
					}).removeAttr('href');
				})
			}
	};
	coolhiiVIPVideo.start=function(){
    	if(this.judgeVipWebsite() && window.top==window.self){
			const self = this;
			setTimeout(function(){	
				self.addStyle();
				self.generateHtml();
				self.operation();
				self.pageEventExtend();
			},1500);
    	}
    };
	coolhiiVIPVideo.start();
   	   	   	
   	/**
   	 * 音乐下载:无损音乐、封面、歌词
   	 */
   	const coolhiiVIPMusic={};
   	coolhiiVIPMusic.eleId = Math.ceil(Math.random()*100000000);
   	coolhiiVIPMusic.isRun = function(){
   		var musicurls=["music.163.com","y.qq.com","www.kugou.com","www.kuwo.cn","www.xiami.com","music.taihe.com","music.migu.cn","lizhi.fm","qingting.fm","ximalaya.com"];
   		for(var i=0; i<musicurls.length;i++){
   			if(window.location.host.indexOf(musicurls[i])!=-1){
   				return true;
   			}
   		}
   		return false;
   	};
   	coolhiiVIPMusic.getPlayUrl = function(){
   		var currentHost = window.location.host;
   		var currentUrl = window.location.href;
   		var playUrl = null;
   		if(currentUrl.match(/music\.163\./)){ //网易云音乐
   			if(currentUrl.match(/^https?:\/\/music\.163\.com\/#\/(?:song|dj)\?id/)) {
   				playUrl = 'https://music.liuzhijin.cn/?url='+encodeURIComponent(currentUrl);
   			}else if(currentUrl.match(/^https?:\/\/y\.music\.163\.com\/m\/(?:song|dj)\?id/)) {
   				playUrl = 'https://music.liuzhijin.cn/?url='+encodeURIComponent('https://music.163.com/song?id='+getQueryString('id'));
   			}
   		}
   		else if(currentUrl.match(/y\.qq\.com/)){ //QQ音乐
   			if(currentUrl.indexOf("?")) currentUrl = currentUrl.split("?")[0];
   			if(currentUrl.indexOf("#")) currentUrl = currentUrl.split("#")[0];
   			var musicMatch = currentUrl.match(/^https?:\/\/y\.qq\.com\/n\/ryqq\/songDetail\/(\S*)/);
   			if(musicMatch){
   				playUrl = 'https://music.liuzhijin.cn/?id='+musicMatch[1]+'&type=qq'
   			}
   			var musicMatch2 = currentUrl.match(/^https?:\/\/y\.qq\.com\/n\/yqq\/song\/(\S*).html/);
   			if(musicMatch2){
   				playUrl = 'https://music.liuzhijin.cn/?id='+musicMatch2[1]+'&type=qq';
   			}
   		}
   		else if(currentUrl.match(/kugou\.com/)){ //酷狗
   			var musicMatch = currentUrl.match(/hash=(\S*)&album/);
   			if(musicMatch){
   				playUrl = 'https://music.liuzhijin.cn/?id='+musicMatch[1]+'&type=kugou';
   			}
   		}
   		else if(currentUrl.match(/kuwo\.cn/)){  //酷我
   			if(currentUrl.indexOf("?")) currentUrl = currentUrl.split("?")[0];
   			if(currentUrl.indexOf("#")) currentUrl = currentUrl.split("#")[0];
   			var musicMatch = currentUrl.match(/play_detail\/(\S*)/);
   			if(musicMatch){
   				playUrl = 'https://music.liuzhijin.cn/?id='+musicMatch[1]+'&type=kuwo';
   			}
   		}
   		else if(currentUrl.match(/www\.ximalaya\.com/)){ //喜马拉雅
   		    var xmlyUrlArr = currentUrl.split("/");
   		    for(var xuaIndex =0;xuaIndex<xmlyUrlArr.length;xuaIndex++){
   		        if(xuaIndex==xmlyUrlArr.length-1){
   					playUrl = 'https://music.liuzhijin.cn/?id='+xmlyUrlArr[xuaIndex]+'&type=ximalaya&playUrl='+encodeURIComponent(currentUrl);
   		        }
   		    }
   		}
   		else if(currentUrl.match(/www\.lizhi\.fm/)){ //荔枝音乐
   			if(currentUrl.indexOf("?")) currentUrl = currentUrl.split("?")[0];
   			if(currentUrl.indexOf("#")) currentUrl = currentUrl.split("#")[0];
   			var musicMatch = currentUrl.match(/^https?:\/\/www\.lizhi\.fm\/(\d*)\/(\d*)/);
   			if(musicMatch){
   				playUrl = 'https://music.liuzhijin.cn/?id='+musicMatch[2]+'&type=lizhi';
   			}
   		}
   		else if(currentUrl.match(/music\.migu\.cn/)){ //咪咕音乐
   			if(currentUrl.indexOf("?")) currentUrl = currentUrl.split("?")[0];
   			if(currentUrl.indexOf("#")) currentUrl = currentUrl.split("#")[0];
   			var musicMatch = currentUrl.match(/^https?:\/\/music\.migu\.cn\/v3\/music\/song\/(\S*)/);
   			if(musicMatch){
   				playUrl = 'https://music.liuzhijin.cn/?id='+musicMatch[1]+'&type=migu';
   			}
   		}
   		return playUrl;
   	};
   	coolhiiVIPMusic.addStyle=function(){
		var themeColor = "#FF6600";
   		var innnerCss = 
   		"@keyframes turnaround{0%{-webkit-transform:rotate(0deg);}25%{-webkit-transform:rotate(90deg);}50%{-webkit-transform:rotate(180deg);}75%{-webkit-transform:rotate(270deg);}100%{-webkit-transform:rotate(360deg);}}"+
   		"#plugin_kiwi_analysis_vip_music_box_"+this.eleId+" {position:fixed; top:160px; left:0px; width:30px; background-color:"+themeColor+";z-index:9999999899999;}"+
   		"#plugin_kiwi_analysis_vip_music_box_"+this.eleId+" >.plugin_item{cursor:pointer; width:100%; padding:10px 0px; text-align:center;}"+
   		"#plugin_kiwi_analysis_vip_music_box_"+this.eleId+" >.plugin_item >img{width:20px; display:inline-block; vertical-align:middle;animation:turnaround 3s linear infinite;}";
   		$("body").prepend("<style>"+innnerCss+"</style>");
   	};
   	coolhiiVIPMusic.generateHtml=function(){
   		var html="";
   		var vipImgBase64 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAFM0lEQVRoQ+2Ye8jeYxjHP9+i8Afl0JzKOWeSORTFioYhMvuHHFasibaRFH/MxD/awdac5jCznOUUplFbyHnMhMiQOR82ioQ/vrqe7qd+7+/5He7nffe8WnbV09v7PNd139f3Ol+32MRJm7j+bAbwX3vw/+0B2ycCJwE7ps8OwIbC5xPgIUm/D8pTfXvA9qnAJGACsFOGYv8A9wDPSFqWwd8XSzYA28cAVwDnlW74BQjL59ASYI6kD3KYc3iyANi+DrixcOA3wFPAS8BZwIU5lyWeCKfZkmb1IVPL2grA9hPA2YUTrgbulvRrfGd7IvDYMJRZIGnaMOSGiDQCsB2xO7kgMV7S8uIJtrcC/hymIvdL6njP9u3A68ALkn7MPa8WgO1LgEWFg3aW9EPVwbY/BfbLvbTEN07SSttO338BzJc0P+e8SgC2z4iqUThgrKRVdQfang1clXNhBU8ZQJflZeCmssfL8nUAXkz1PfgnSWqMcdsnACs3MoDucXMl1RqnB4Dti4DFJWXmSbqyScFCCPSDY6akG1IOdEOoSn6hpCjhPVQF4E3g6AreSLDLJb1b/s32YcBdNXJV974CTJP0XvfHDAPMkHRLYwjZDsUDQBNNlXRHsloofi9wZB9mv0bSzRVGaPJAl32CpOeLskM8YDuaVTStNooQi8T9MDFGc4ox4aNUjQ4BAlyRIq+mSwqeHsrwQMjcJ+niJgCvAse1aZ9+D+UPBl4DJkr6rhAOY4DwUnTpoAiXBcVzbR8PnAysKJXRpuv/AMZIir8dKnsgrHNgJoBgiwa2u6T1ZRnb+wNhkJhUO2XYdkyupydgeySZujJap8alkiLfKgF8Hwj7APCApPPr+G1HrMfo8VZDgpcBRE5FH6qbdFdKGlcH4G9gyz4AzJJ0fQOA2BdWtJw3BIAk2d4HiLJ9WYXsx5IOqgMQA9p2fQDoSapSnAe4mf0CKORSlfwGSdvXAVgL7N0HgNWSjmjwwPsV1ajM3uOBkhHCAEUv/yUpBsjKHKhrYl3+34DbJF1rO4auPYGY6+8sVqFgtp1j/WBtA3A4sLoAaq2kfesAROmbUmHR52ItlPRkwb3nAo+m/79Nw98jwJlAlMijMj3ZCCAZI5pXrLJBjUl8GhDKBsXa9yCwVFJsYD1kuwgiU98ethwA04F5SXLISFE1CxXzoHaMth2lLDwQdX4klAOgaNi9JH1ZGULJXcX9d5GknpCyfUDaiaNZjZRyAMwA5gLLJY0vXljlgW2BNwodeYgXbG8TB/UxcrQBzAHQzc0LJC1tBJC8MDWqTWKMmSeWms4QZvvplKhtiuX+ngMgmuE7kqKrD6GmnXhO6oYh0AER+wAQ4DYmtZXRLaKYSIr7e6jtVWINcGjBEzF9joQiNOM96XPga2CdpPgbnu3sAzFKFC+IAVBSvD9VUs670LqYOEeidTyVAEskPZyU3S2duTWwXtKaOgBt97YCSBdGuYyaPxyKV7hO7NqOZ8nYbeOZskifAZ3uWvZA24VZANLlEftxeT/7wmJJk23HfLWw0E1r9RoYgAQiSmyAiB0gekETrZI01nZMt8+m8aLNoIPzQPlm28cCpySrRkMrj+FTJC2y/ThwTqvmiWGgHmhSwvYuQACJ58efJP2cvBYTbHguh5ZJirEhm7JzIPvEEmPma0NXqvUVsKzHaADIrWCdkOvXUAMHkMIoxvFda5T7Cri16rErB8yoAEggYkOL7SoW/QD0dnqtiDEh8mRYNGoAhqVdhtBmABlGGijLZg8M1LwZh/8L0s4qT+Ct+wMAAAAASUVORK5CYII=";
   		html+= "<div id='plugin_kiwi_analysis_vip_music_box_"+this.eleId+"'>";
   		html+= "<div class='plugin_item jump_analysis_website' title='VIP音乐破解,免客户端下载!'><img src='"+vipImgBase64+"'></div>";
   		html+= "</div>";
   		$("body").append(html);
   		
   		$("#plugin_kiwi_analysis_vip_music_box_"+this.eleId+"").on("click", function(){
   			var playUrl = coolhiiVIPMusic.getPlayUrl();
   			if(!!playUrl) GM_openInTab(playUrl, false);
   		})
   	};
   	coolhiiVIPMusic.operation=function(){
   		setInterval(function(){
   			var playUrl = coolhiiVIPMusic.getPlayUrl();
   			var $vipMusicBox = $("#plugin_kiwi_analysis_vip_music_box_"+coolhiiVIPMusic.eleId+"");
   			if(!!playUrl){
   				if($vipMusicBox.length==0){
   					coolhiiVIPMusic.generateHtml();
   				}
   			}else{
   				$vipMusicBox.remove();
   			}
   		}, 100);
   	};
   	coolhiiVIPMusic.start=function(){
   		if(this.isRun()){
   			this.addStyle();
   			this.operation();
   		}
   	};
   	coolhiiVIPMusic.start();
		
	/**
	 * 领券相关
	 */
	var goodsCoupon={};
	goodsCoupon.getPlatform=function(){
		var couponUrl = window.location.href;
		var platform="";
		if(couponUrl.indexOf("suning.com")!=-1){
			platform = "suning";
		}else if(couponUrl.indexOf("detail.tmall")!=-1){
			platform = "tmall";
		}else if(couponUrl.indexOf("item.taobao.com")!=-1){
			platform = "taobao";
		}else if(couponUrl.indexOf("item.jd.com")!=-1 || couponUrl.indexOf("item.yiyaojd.com")!=-1 || couponUrl.indexOf("npcitem.jd.hk")!=-1){
			platform = "jd";
		}else if(couponUrl.indexOf("detail.vip.com")!=-1){
			platform = "vpinhui";
		}else if(couponUrl.indexOf("mobile.yangkeduo.com")!=-1){
			platform = "pdd";
		}
		return platform;
	}
	goodsCoupon.filterStr = function(str){
		if(!str) return "";
		str = str.replace(/\t/g,"");
		str = str.replace(/\r/g,"");
		str = str.replace(/\n/g,"");
		str = str.replace(/\+/g,"%2B");//"+"
		str = str.replace(/\&/g,"%26");//"&"
		str = str.replace(/\#/g,"%23");//"#"
		return encodeURIComponent(str)
	};
	goodsCoupon.getGoodsData=function(platform){
		var goodsId = "";
		var goodsName = "";
		var websiteUrl = window.location.href;
		if(platform=="taobao"){
			goodsId = this.getQueryString("id");
			goodsName=$(".tb-main-title").text();
			
		}else if(platform=="tmall"){
			goodsId = this.getQueryString("id");
			goodsName=$(".tb-detail-hd").text();
			
		}else if(platform=="jd"){
			goodsName=$("div.sku-name").text();
			goodsId = this.getQueryStringByUrl(websiteUrl);
			
		}else if(platform=="suning"){
			var text = $("#itemDisplayName").text();
			if(!!text){
				text = text.replace("苏宁超市","");
				text = text.replace("自营","");
			}
			goodsName=text;
			goodsId = this.getQueryStringByUrl(websiteUrl);
			
		}else if(platform=="vpinhui"){
			goodsId = this.getQueryStringByUrl(websiteUrl).replace("detail-","");
			goodsName = $(".pib-title-detail").text();
			
		}else if(platform=="pdd"){
			goodsId = this.getQueryString("goods_id");
			goodsName = $(".enable-select").text();
		}
		var data={"goodsId":goodsId, "goodsName":this.filterStr(goodsName)}
		return data;
	};
	goodsCoupon.request = function(mothed, url, param){
		return new Promise(function(resolve, reject){
			GM_xmlhttpRequest({
				url: url,
				method: mothed,
				data:param,
				onload: function(response) {
					var status = response.status;
					var playurl = "";
					if(status==200||status=='200'){
						var responseText = response.responseText;
						resolve({"result":"success", "json":responseText});
					}else{
						reject({"result":"error", "json":null});
					}
				}
			});
		})
	};
	goodsCoupon.createHtml = function(platform, goodsId, goodsName){
		if(!platform || !goodsId) return;
		var goodsCouponUrl = "https://t.mimixiaoke.com/api/plugin/hit/v2?script=1&v=1.0.2&";
		var goodsPrivateUrl = "https://t.mimixiaoke.com/api/private/change/coupon?script=2&v=1.0.2&platform="+platform+"&id=";
		if(platform==="jd"){
			goodsCouponUrl = "http://t.jtm.pub/api/platform/jd/coupon?itemId="+goodsId+"&q="+goodsName+"&content=&no=1&v=1.0.2";
			goodsPrivateUrl = "http://t.jtm.pub/api/private/change/coupon?no=1&v=1.0.2&platform="+platform+"&id=";
		}else{			
			if(platform!=="vpinhui"){
				goodsCouponUrl = goodsCouponUrl+"platform="+platform+"&id="+goodsId+"&q="+goodsName;
			}else{
				var vip = goodsId.split("-");
				if(vip.length!=2) return;
				
				var vaddition = vip[0];
				var vid = vip[1];
				goodsCouponUrl = goodsCouponUrl+"platform="+platform+"&id="+vid+"&q="+goodsName+"&addition="+vaddition;
			}		
		}
		this.request("GET", goodsCouponUrl, null).then((resutData)=>{
			if(resutData.result==="success" && !!resutData.json){
				var data = JSON.parse(resutData.json).data;
				if(!data || data==="null" || !data.css || !data.html || !data.handler){
					return;
				}
				var cssText = data.css;
				var htmlText = data.html;
				var handler = data.handler;
				var templateId = data.templateId;
				$("body").prepend("<style>"+cssText+"</style>");
				
				var handlers = handler.split("@");
				for(var i=0; i<handlers.length; i++){
					var $handler = $(""+handlers[i]+"");
					if(platform=="taobao"){
						$handler.parent().after(htmlText);
					}else if(platform=="tmall"){
						$handler.parent().after(htmlText);
					}else if(platform=="jd"){
						$handler.after(htmlText);
					}else if(platform=="suning"){
						$handler.parent().after(htmlText);
					}else if(platform=="vpinhui"){
						$handler.parent().after(htmlText);
					}else if(platform=="pdd"){
						$handler.after(htmlText);
					}
				}
				
				var $llkk = $("#"+templateId);
				if($llkk.length != 0){
					//点击
					let couponElementA = $llkk.find("a[name='cpShUrl']");
					couponElementA.unbind("click").bind("click", ()=>{
						event.stopPropagation();
						event.preventDefault();
						let couponId = $llkk.data("id");
						if(!!couponId){
							this.request("GET", goodsPrivateUrl+couponId, null).then((resutData2)=>{
								if(resutData2.result==="success" && !!resutData2.json){
									let url = JSON.parse(resutData2.json).url;
									if(!!url) GM_openInTab(url, {active:true});
								}
							});
						}
					});
					setInterval(()=>{
						$llkk.find("*").each(function(){
							$(this).removeAttr("data-spm-anchor-id")
						});
					},100);
					
					//canvas画二维码
					var $canvasElement = $("#ca"+templateId);
					if($canvasElement.length != 0){
						let couponId = $llkk.data("id");
						this.request("GET", goodsPrivateUrl+couponId, null).then((resutData2)=>{
							if(resutData2.result==="success" && !!resutData2.json){
								let img = JSON.parse(resutData2.json).img;
								if(!!img){
									var canvasElement = document.getElementById("ca"+templateId);
									var cxt = canvasElement.getContext("2d");
									var imgData = new Image();
									imgData.src = img;
									imgData.onload=function(){
										cxt.drawImage(imgData, 0, 0, imgData.width, imgData.height);
									}
								}
							}
						});
					}
					
				}
				
			}
		});
	};
	goodsCoupon.getQueryString = function(tag) {
		var t = new RegExp("(^|&)" + tag + "=([^&]*)(&|$)");
		var a = window.location.search.substr(1).match(t);
		if (a != null) return a[2];
		return "";
	};
	goodsCoupon.getQueryStringByUrl = function(url) {
		if(url.indexOf("?")!=-1){
			url = url.split("?")[0]
		}
		if(url.indexOf("#")!=-1){
			url = url.split("#")[0]
		}
		var splitText = url.split("/");
		var idText = splitText[splitText.length-1];
		idText = idText.replace(".html","");
		return idText;
	};
	goodsCoupon.randomSpmValue=function(){
		$("meta[name='data-spm']").each(function(){
			var max = 5000;
			var min = 1000;
			var randomValue = Math.floor(Math.random() * (max - min + 1) ) + min;
			var randomLetter = String.fromCharCode(Math.floor( Math.random() * 26) + "a".charCodeAt(0));
			$(this).attr("content", randomValue+randomLetter);
		});
		$("meta[name='spm-id']").each(function(){
			var max = 5000;
			var min = 1000;
			var randomValue = Math.floor(Math.random() * (max - min + 1) ) + min;
			var randomLetter = String.fromCharCode(Math.floor( Math.random() * 26) + "a".charCodeAt(0));
			$(this).attr("content", randomValue+randomLetter);
		});
	};
	goodsCoupon.runAliDeceptionSpm=function() {
		if(window.location.host.indexOf("aliyun.com")!=-1 || window.location.host.indexOf("taobao.com")!=-1 || window.location.host.indexOf("tmall.com")!=-1){
			this.randomSpmValue();
			setInterval(()=>{
				this.randomSpmValue();
			}, 4000);
		}
	};
	goodsCoupon.start = function(){
		var platform = this.getPlatform();
		if(!platform) return;
		var delayMS = 0;
		if(platform=="vpinhui"){ //唯品会采用了异步加载
			var vipInterval = setInterval(function(){
				if($(".pib-title-detail").length!=0 || delayMS>=1200){
					var goodsData = goodsCoupon.getGoodsData(platform);
					goodsCoupon.createHtml(platform, goodsData.goodsId, goodsData.goodsName);
					clearInterval(vipInterval)
				}
				delayMS+=100;
			},100);
		}else{
			var goodsData = goodsCoupon.getGoodsData(platform);
			goodsCoupon.createHtml(platform, goodsData.goodsId, goodsData.goodsName);
		}
	};
	goodsCoupon.start();
	
	/**
	 * 百度文库开始
	 */
	const baiduwenkuHelper={};
	baiduwenkuHelper.wenkudownloadUrl = "http://www.tool77.com/tampermonkey/doc/download?docs=11&wenku_url=";
	baiduwenkuHelper.isRun = function(){
		if(window_host.indexOf("wenku.baidu.com") != -1){
			return true;
		}
		return false;
	};
	baiduwenkuHelper.removeAD=function(){
		if(window_host.indexOf("wenku.baidu.com") != -1){
		    setInterval(function(){
		    	$(".banner-ad").hide();
		    	$(".union-ad-bottom").hide();
		    	$("iframe").hide();
		    	
		    	//VIP去广告小按钮
		    	$(".ggbtm-vip-close").hide();
		    	$(".ad-vip-close-bottom").hide();
		    	$(".ad-vip-close").hide();
		    	
		    	//搜索页面
		    	$("#fengchaoad").hide();
		    	$(".search-aside-adWrap").hide();
		    },300);
	    }
	};
	baiduwenkuHelper.generateHtml=function(){
		const $that = this;
		if((window_url.indexOf("wenku.baidu.com/view")==-1 && window_url.indexOf("wenku.baidu.com/link")==-1) 
			|| window_host!="wenku.baidu.com"){
			return;
		}
		var topBox = "<div style='position:fixed;z-index:999999;background-color:#ccc;cursor:pointer;top:150px;left:0px;'>"+
						"<div id='baiduwenku_helper_download_btn' style='font-size:12px;padding:8px 2px;color:#FFF;background-color:#25AE84;'>下载</div>"+
				 	 "</div>";
		$("body").append(topBox);
		$("body").on("click","#baiduwenku_helper_download_btn",function(){  //解析下载
			var wenkuUrl = $that.wenkudownloadUrl+encodeURIComponent(window_url);
			GM_openInTab(wenkuUrl, { active: true });
		});	
	};
	baiduwenkuHelper.start=function(){
		if(this.isRun()){			
			this.generateHtml();
			this.removeAD();
		}
	};
	baiduwenkuHelper.start();
	
	/**
	 * 知乎助手开始
	 */
	////**********************************************
	//本脚本部分代码借鉴自【人鬼情未了】的脚本,已经获得原作者的完全授权,脚本代码可以随意修改使用,特此申明!
	////【人鬼情未了】脚本名字:知乎网页助手
	////【人鬼情未了】脚本地址:http://greasyfork.icu/zh-CN/scripts/384172
	////本脚本做出的修改:重构了部分逻辑
	////**********************************************
	const zhihuHelper={};
	zhihuHelper.autoJumpTarget = function(){ //直接跳转到目标网页
		var regexResult = location.search.match(/target=(.+?)(&|$)/);
		if(regexResult && regexResult.length==3){
			location.href = decodeURIComponent(regexResult[1]);
		}
	};
	zhihuHelper.clearAdvert = function(){  //去除广告,可能造成误伤,用最小策略
		setInterval(function(){
			var ad1 = document.querySelector('.AppBanner');
			if (ad1!=="undefined" && ad1!==null) {
			    ad1.style.display = "none";
			}
			var ad2 = document.querySelector('.AdblockBanner');
			if (ad2!=="undefined" && ad2!==null) {
			    ad2.style.display = "none";
			}
		}, 1000);
	};
	zhihuHelper.changeHeightQualityPic = function(){ //图片自动高清
		setInterval(function(){
			$("body").find("img").each(function(){
				var dataoriginal = $(this).attr("data-original");
				if(!!dataoriginal){
					$(this).attr("src", dataoriginal);
				}
			});
		}, 500);
	};
	zhihuHelper.noLoginBox = function(){ //去除登录提示
		var IntervalUnit = 200;
		var totalIntervalMs = 0;
		var loginInterval = setInterval(function(){
			$(".signFlowModal").children(".Modal-closeButton").click();
			totalIntervalMs += IntervalUnit;
			if(totalIntervalMs >= 2000){  //循环多次,我就不信还显示
				clearInterval(loginInterval);
			}
		}, IntervalUnit); 
		$(".AppHeader-login").click(function(){
			clearInterval(loginInterval);
			$(".Modal-wrapper").show();
		});
	};
	zhihuHelper.markQuestionDate = function(){  //标注回答时间
		/**
		 * @param {Object} time
		 * @param {Object} format
		 * 时间格式化
		 * DateFormat(new Date(dateCreated), "yyyy-MM-dd hh:mm:ss")
		 */
		function DateFormat(time, format) {  //
		    var o = {
		        "M+": time.getMonth() + 1, //月份 
		        "d+": time.getDate(), //日 
		        "h+": time.getHours(), //小时 
		        "m+": time.getMinutes(), //分 
		        "s+": time.getSeconds(), //秒 
		        "q+": Math.floor((time.getMonth() + 3) / 3), //季度 
		        "S": time.getMilliseconds() //毫秒 
		    };
		    if(/(y+)/.test(format)){
				format = format.replace(RegExp.$1, (time.getFullYear() + "").substr(4 - RegExp.$1.length));
			}
		    for(var k in o){
		        if(new RegExp("(" + k + ")").test(format)){
		            format = format.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
				}
			}
		    return format;
		}
		
		/**
		 * 为问题添加创建时间和编辑时间
		 */
		function addDateQuestion() {
			var title = document.querySelector(".QuestionPage");
			if(!!title){
				var dateCreated = title.querySelector("[itemprop~=dateCreated][content]").content;
				var dateModified = title.querySelector("[itemprop~=dateModified][content]").content;
				var createDate = DateFormat(new Date(dateCreated), "yyyy-MM-dd hh:mm:ss");
				var editDate = DateFormat(new Date(dateModified), "yyyy-MM-dd hh:mm:ss");
				
				var side = title.querySelector(".QuestionHeader-side");
				var timeDiv = document.createElement('div');
				timeDiv.innerHTML = `<p>创建于:&nbsp;${createDate}</p><p>编辑于:&nbsp;${editDate}</p>`;
				timeDiv.style.cssText = 'color:#6f6f6f;font-size:13px;';
				side.appendChild(timeDiv);
			}
		}
		
		/**
		 * 为回答添加创建时间和编辑时间
		 */
		function addTimeAnswerItems() {
			var list = document.querySelectorAll(".AnswerItem");
			for (var i = 0; i < list.length; i++) {
				var item = list[i];
				if (item.getAttribute('zh_date_mk') === 'true') {
					continue;
				}
				item.setAttribute('zh_date_mk', 'true');
				try{					
					var dateCreated = item.querySelector("[itemprop~=dateCreated][content]").content;
					var dateModified = item.querySelector("[itemprop~=dateModified][content]").content;
					var createDate = DateFormat(new Date(dateCreated), "yyyy-MM-dd hh:mm:ss");
					var editDate = DateFormat(new Date(dateModified), "yyyy-MM-dd hh:mm:ss");

					var sideItem = item.querySelector(".ContentItem-meta");
					var timeDiv = document.createElement('div');
					timeDiv.innerHTML = `创建于:&nbsp;${createDate}&nbsp;&nbsp;&nbsp;编辑于:&nbsp;${editDate}`;
					timeDiv.class = "Voters";
					timeDiv.style.cssText = 'color:#6f6f6f;font-size:13px;display:block;padding:5px 0px;';
					sideItem.appendChild(timeDiv);
				}catch(e){}
			}
		}
		addDateQuestion();
		setInterval(function(){ //循环检查回答和修改时间
			addTimeAnswerItems();
		},400);
		//document.querySelector(".Question-main").addEventListener('DOMNodeInserted', addTimeAnswerItems);
	};
	zhihuHelper.autoExpandQuestionInfo = function(){ //问题全部展开
		var mm0 = document.querySelector('.QuestionRichText-more');
		if(mm0!=="undefined" && mm0!==null) { //展开问题描述
			mm0.click();
		}
		var mm1 = document.querySelector('.SignContainer-content');
		if(mm1!=="undefined" && mm1!==null) {
			var c1 = document.querySelector('.Modal-backdrop');
			if (c1!=="undefined" && c1!==null) {
				c1.click();
			}
			var c2 = document.querySelector('.Modal-closeButton');
			if (c2!=="undefined" && c2!==null) {
				c2.click();
			}
		}
	};
	zhihuHelper.start = function(){
		//直接跳转到目标网页
	    if(window_host == "link.zhihu.com"){ 
	    	this.autoJumpTarget();
		}
		//知乎正文
		if(window_host.indexOf("zhihu.com")!=-1){
		    if(window_url.indexOf("https://www.zhihu.com/question/") != -1){
		        this.autoExpandQuestionInfo();     //问题全部展开
	    		this.markQuestionDate();           //问题日期
		    }
		    this.noLoginBox();     //去除登录框
		    this.clearAdvert();    //去除广告
		}
	};
	zhihuHelper.start();
	
	
	/**
	 * B站视频下载
	 * @param {Object} toolObject
	 */
	////**********************************************
	//本脚本部分代码借鉴自【爱画画的猫】的脚本,已经获得原作者的完全授权,脚本代码可以随意修改使用,特此申明!
	////【爱画画的猫】脚本地址:http://greasyfork.icu/zh-CN/scripts/418804
	////本脚本做出的修改:重构了部分逻辑
	////**********************************************
	function BilibiliVideoDownloadHelper(toolObject){
		this.toolObject=toolObject;
		this.downloadResutError=function($btn){
			alert("下载出错了");
			$btn.text("下载视频(最高清)");
			$btn.removeAttr("disabled");
		};
		this.downloadResutSuccess=function($btn){
			$btn.text("下载视频(最高清)");
			$btn.removeAttr("disabled");
		};
		this.downloadVideo=function($btn){
			let bv = toolObject.getBilibiliBV();
			if(!bv){
				this.downloadResutError();
			}else{				
				//bv转av
				toolObject.request("get", "http://api.bilibili.com/x/web-interface/archive/stat?bvid="+bv, null).then((resultData)=>{
					let dataJson = JSON.parse(resultData.data);
					if(!!dataJson && dataJson.code===0 && !!dataJson.data){
						let aid = dataJson.data.aid;
						if(!aid){
							this.downloadResutError($btn);
						}else{
							//获取cid
							toolObject.request("get", "https://api.bilibili.com/x/web-interface/view?aid="+aid, null).then((resultData2)=>{
								let dataJson2 = JSON.parse(resultData2.data);
								if(!!dataJson2 && dataJson2.code===0 && !!dataJson2.data){
									let aid = dataJson2.data.aid;
									let bvid = dataJson2.data.bvid;
									let cid = dataJson2.data.cid;
									if(!aid || !bvid || !cid){
										this.downloadResutError($btn);
									}else{
										//获取播放链接
										toolObject.request("get", "https://api.bilibili.com/x/player/playurl?avid="+aid+"&cid="+cid+"&qn=112", null).then((resultData3)=>{
											let dataJson3 = JSON.parse(resultData3.data);
											if(!!dataJson3 && dataJson3.code===0 && !!dataJson3.data){
												this.downloadResutSuccess($btn);
												window.open(dataJson3.data.durl[0].url);
											}
										}).catch((errorData)=>{
											this.downloadResutError($btn);
										});
									}
								}
							}).catch((errorData)=>{
								this.downloadResutError($btn);
							});
						}
					}
				}).catch((errorData)=>{
					this.downloadResutError();
				});
			}
		}
		this.createElementHtml = function(){
			let randomNumber = this.toolObject.randomNumber();
			let cssText = 
			`
				#bilibili_exti_`+randomNumber+`{padding:10px;}
				#bilibili_exti_`+randomNumber+` >.self_s_btn{background-color:#FB7299; color:#FFF; font-size:10px;display:inline-block; margin-right:15px;padding:2px 4px;border-radius:3px;cursor:pointer;}
			`;
			let htmlText=
			`
				<div id="bilibili_exti_`+randomNumber+`">
					<span class="self_s_btn" id="download_s_`+randomNumber+`">下载视频(最高清)</span>
					<span class="self_s_btn" id="focus_s_`+randomNumber+`">一键三连</span>
				</div>
			`;
			setTimeout(()=>{
				if($("#bilibili-player").html().length >= 10){
					$("body").prepend("<style>"+cssText+"</style>");
					$("#viewbox_report div.video-data").append(htmlText);
					let $that = this;
					$("#download_s_"+randomNumber).on("click", function(){
						$(this).attr("disabled", "disabled");
						$(this).text("下载视频(准备中)")
						$that.downloadVideo($(this));
					});
					$("#focus_s_"+randomNumber).on("click", function(){
						$("#arc_toolbar_report .like").click();
						$("#arc_toolbar_report .coin").click();
					});
				}
			}, 2500);
		}
		this.start = function(){
			if(window.location.pathname.indexOf("/video")!=-1 && window.location.host==="www.bilibili.com"){
				this.createElementHtml();
			}
		}
	}
	
	/**
	 * 记录b站的观看记录
	 * @param {Object} toolObject
	 */
	////**********************************************
	//本脚本部分代码借鉴自【爱画画的猫】的脚本,已经获得原作者的完全授权,脚本代码可以随意修改使用,特此申明!
	////【爱画画的猫】脚本地址:http://greasyfork.icu/zh-CN/scripts/418804
	////本脚本做出的修改:重构了部分逻辑
	////**********************************************
	function RecordViewFunction(toolObject){
		this.toolObject=toolObject;
		this.localCacheName = "bilibili_video_record"; 
		this.recordOneVideo = function(){
			let promise = new Promise((resolve, reject)=>{
				let bv = toolObject.getBilibiliBV();
				let cacheText = toolObject.GMgetValue(this.localCacheName);
				cacheText = !cacheText ? "" : cacheText+"#";
				let viewArray = cacheText.split("#");
				let len = viewArray.length;
				let limitNum = 2000;  //最多保存2000个视频记录
				if(len>=limitNum){ //超过则清除最开始的1/4
					let newCacheText = "";
					let limitNumHalf = limitNum/4;
					for(var i=0; i<len; i++){
						if(i>=limitNumHalf){
							newCacheText += "#" + viewArray[i];
						}
					}
					cacheText = newCacheText;
				}
				if(cacheText.indexOf(bv)==-1){
					cacheText += bv;
					toolObject.GMsetValue(this.localCacheName, cacheText);
				}
				resolve({"result":"success"});
			});
		};
		this.searchPageRemindHtml = function($ele, top=8, right=8){
			$ele.css("position","relative");
			$ele.append("<div style='position:absolute; top:"+top+"px; right:"+right+"px; background-color: rgba(0,0,0,0.8); border-radius:3px; font-size:10px; color:#FFF;padding:2px 5px;'>已看</div>");
		};
		this.searchPageRemind = function(){
			let $that = this;
			setInterval(function(){
				let cacheText = toolObject.GMgetValue($that.localCacheName);
				cacheText = !cacheText ? "" : cacheText;
				$(".video-list .video-item").each(function(){ //搜索结果
					if($(this).attr("dealxll")!=="true"){
						var videourl = $(this).children("a").attr("href");
						if(cacheText.indexOf(videourl.split("?")[0].replace("//www.bilibili.com/video/",""))!=-1){
							$that.searchPageRemindHtml($(this));
						}
						$(this).unbind("click").bind("click", ()=>{ //循环操作,单独绑定
							$that.searchPageRemindHtml($(this));
						})
						$(this).attr("dealxll","true");
					}
				});
				$("#page-index .small-item").each(function(){ //用户主页
					if($(this).attr("dealxll")!=="true"){
						var videourl = $(this).children("a").attr("href");
						if(cacheText.indexOf(videourl.split("?")[0].replace("//www.bilibili.com/video/",""))!=-1){
							$that.searchPageRemindHtml($(this), 12, 12);
						}
						$(this).unbind("click").bind("click", ()=>{  //循环操作,单独绑定
							$that.searchPageRemindHtml($(this), 12, 12);
						})
						$(this).attr("dealxll","true");
					}
				});
				$("#submit-video-list .small-item").each(function(){ //用户投稿
					if($(this).attr("dealxll")!=="true"){
						var videourl = $(this).children("a").attr("href");
						if(cacheText.indexOf(videourl.split("?")[0].replace("//www.bilibili.com/video/",""))!=-1){
							$that.searchPageRemindHtml($(this), 12, 12);
						}
						$(this).unbind("click").bind("click", ()=>{  //循环操作,单独绑定
							$that.searchPageRemindHtml($(this), 12, 12);
						})
						$(this).attr("dealxll","true");
					}
				});
			}, 100);
		}
		this.start=function(){
			let $that = this;
			if(window.location.pathname.indexOf("/video")!=-1 && window.location.host==="www.bilibili.com"){
				let currentHref = "";
				setInterval(()=>{ //需要循环存储
					if(window.location.href!==currentHref){
						this.recordOneVideo();
						currentHref = window.location.href;
					}
				},100);
			}
			//搜索结果和用户主页已经看过的视频提醒
			if(window.location.host==="search.bilibili.com" || window.location.host==="space.bilibili.com"){
				this.searchPageRemind();
				GM_registerMenuCommand("清空脚本保存的浏览记录",function(){
					if(confirm('是否要清空脚本保存的浏览记录?清空后将不可恢复...')){
						$that.toolObject.GMsetValue($that.localCacheName, "");
					}
				});
			}
		};
	}
	try{
		(new BilibiliVideoDownloadHelper(toolObject)).start();
		(new RecordViewFunction(toolObject)).start();
	}catch(e){}
})();

/**
 * 作者备注:
 * 王超先生的知乎视频下载脚本代码非常精炼,我认为此功能不需要再二次编写了
 * 此部分代码已获得原作者授权同意,并符合MIT协议,请知悉!
 * 下载知乎视频,作者:王超, 脚本链接:http://greasyfork.icu/zh-CN/scripts/39206
 * 版本:1.30
 * 版权归原作者所有
 */
(async () => {
  if (window.location.host == 'www.zhihu.com') return;
 
  console.log('知乎视频下载:');
 
  const playlistBaseUrl = 'https://lens.zhihu.com/api/v4/videos/';
  // const videoBaseUrl = 'https://video.zhihu.com/video/';
  const videoId = window.location.pathname.split('/').pop(); // 视频id
  const menuStyle = 'transform:none !important; left:auto !important; right:-0.5em !important;';
  const playerId = 'player';
  const coverSelector = '#' + playerId + ' > div:first-child > div:first-child > div:nth-of-type(2)';
  const controlBarSelector = '#' + playerId + ' > div:first-child > div:first-child > div:last-child > div:last-child > div:first-child';
  const svgDownload = '<path d="M9.5,4 H14.5 V10 H17.8 L12,15.8 L6.2,10 H9.5 Z M6.2,18 H17.8 V20 H6.2 Z"></path>';
  const player = document.getElementById(playerId);
  // const resolutions = {'普清': 'ld', '标清': 'sd', '高清': 'hd', '超清': 'fhd'};
  const resolutions = [
    {ename: 'ld', cname: '普清'},
    {ename: 'sd', cname: '标清'},
    {ename: 'hd', cname: '高清'},
    {ename: 'fhd', cname: '超清'}
  ];
  let videos = []; // 存储各分辨率的视频信息
 
  function fetchRetry (url, options = {}, times = 1, delay = 1000, checkStatus = true) {
    return new Promise((resolve, reject) => {
      // fetch 成功处理函数
      function success (res) {
        if (checkStatus && !res.ok) {
          failure(res);
        }
        else {
          resolve(res);
        }
      }
 
      // 单次失败处理函数
      function failure (error) {
        if (--times) {
          setTimeout(fetchUrl, delay);
        }
        else {
          reject(error);
        }
      }
 
      // 总体失败处理函数
      function finalHandler (error) {
        throw error;
      }
 
      function fetchUrl () {
        return fetch(url, options)
          .then(success)
          .catch(failure)
          .catch(finalHandler);
      }
 
      fetchUrl();
    });
  }
 
  // 下载指定url的资源
  async function downloadUrl (url, name = (new Date()).valueOf() + '.mp4') {
    // Greasemonkey 需要把 url 转为 blobUrl
    if (GM_info.scriptHandler === 'Greasemonkey') {
      const res = await fetchRetry(url);
      const blob = await res.blob();
      url = URL.createObjectURL(blob);
    }
 
    // Chrome 可以使用 Tampermonkey 的 GM_download 函数绕过 CSP(Content Security Policy) 的限制
    if (window.GM_download) {
      GM_download({url, name});
    }
    else {
      // firefox 需要禁用 CSP, about:config -> security.csp.enable => false
      let a = document.createElement('a');
      a.href = url;
      a.download = name;
      a.style.display = 'none';
      // a.target = '_blank';
      document.body.appendChild(a);
      a.click();
      document.body.removeChild(a);
 
      setTimeout(() => URL.revokeObjectURL(url), 100);
    }
  }
 
  // 格式化文件大小
  function humanSize (size) {
    let n = Math.log(size) / Math.log(1024) | 0;
    return (size / Math.pow(1024, n)).toFixed(0) + ' ' + (n ? 'KMGTPEZY'[--n] + 'B' : 'Bytes');
  }
 
  if (!player) return;
 
  // 获取视频信息
  const res = await fetchRetry(playlistBaseUrl + videoId, {
    headers: {
      'referer': 'refererBaseUrl + videoId',
      'authorization': 'oauth c3cef7c66a1843f8b3a9e6a1e3160e20' // in zplayer.min.js of zhihu
    }
  }, 3);
  const videoInfo = await res.json();
 
  // 获取不同分辨率视频的信息
  for (const [key, video] of Object.entries(videoInfo.playlist)) {
    video.name = key.toLowerCase();
    video.cname = resolutions.find(v => v.ename === video.name)?.cname
    if (!videos.find(v => v.size === video.size)) {
      videos.push(video);
    }
  }
 
  // 按格式大小排序
  videos = videos.sort(function (v1, v2) {
    const v1Index = resolutions.findIndex(v => v.ename === v1.name);
    const v2Index = resolutions.findIndex(v => v.ename === v2.name);
 
    return v1Index === v2Index ? 0 : (v1Index > v2Index ? 1 : -1);
    // return v1.size === v2.size ? 0 : (v1.size > v2.size ? 1 : -1);
  }).reverse();
 
  document.addEventListener('DOMNodeInserted', (evt) => {
    const domControlBar = evt.relatedNode.querySelector(':scope > div:last-child > div:first-child > div:nth-of-type(2)');
    if (!domControlBar || domControlBar.querySelector('.download')) return;
 
    const domButtonsBar = domControlBar.querySelector(':scope > div:last-child');
    const domFullScreenBtn = domButtonsBar.querySelector(':scope > div:nth-last-of-type(2)');
    const domResolutionBtn = Array.from(domButtonsBar.querySelectorAll(':scope > div')).filter(el => el.innerText.substr(1, 1) === '清')[0];
    let domDownloadBtn, defaultResolution, buttons;
    if (!domFullScreenBtn || !domFullScreenBtn.querySelector('button')) return;
 
    // 克隆分辨率菜单或全屏按钮为下载按钮
    domDownloadBtn = (domResolutionBtn && (domResolutionBtn.className === domFullScreenBtn.className))
      ? domResolutionBtn.cloneNode(true)
      : domFullScreenBtn.cloneNode(true);
 
    defaultResolution = domDownloadBtn.querySelector('button').innerText;
 
    // 生成下载按钮图标
    domDownloadBtn.querySelector('button:first-child').outerHTML = domFullScreenBtn.cloneNode(true).querySelector('button').outerHTML;
    domDownloadBtn.querySelector('svg').innerHTML = svgDownload;
    domDownloadBtn.className = domDownloadBtn.className + ' download';
 
    buttons = domDownloadBtn.querySelectorAll('button');
 
    // button 元素添加对应的下载地址属性
    buttons.forEach(dom => {
      const video = videos.find(v => v.cname === dom.innerText) || videos[videos.length - 1];
 
      dom.dataset.video = video.play_url;
      if (dom.innerText) {
        (dom.innerText = `${dom.innerText} (${humanSize(video.size)})`);
      }
      else if (buttons.length == 1) {
        dom.nextSibling.querySelector('div').innerText = humanSize(video.size);
      }
    });
 
    // 鼠标事件 - 显示菜单
    domDownloadBtn.addEventListener('pointerenter', () => {
      const domMenu = domDownloadBtn.querySelector('div:nth-of-type(1)');
      if (domMenu) {
        domMenu.style.cssText = menuStyle + 'opacity:1 !important; visibility:visible !important';
      }
    });
 
    // 鼠标事件 - 隐藏菜单
    domDownloadBtn.addEventListener('pointerleave', () => {
      const domMenu = domDownloadBtn.querySelector('div:nth-of-type(1)');
      if (domMenu) {
        domMenu.style.cssText = menuStyle;
      }
    });
 
    // 鼠标事件 - 选择菜单项
    domDownloadBtn.addEventListener('pointerup', event => {
      let e = event.srcElement || event.target;
 
      while (e.tagName !== 'BUTTON') {
        e = e.parentNode;
      }
 
      downloadUrl(e.dataset.video);
    });
 
    // 显示下载按钮
    domButtonsBar.appendChild(domDownloadBtn);
  });
})();