可以在此插件中添加一些脚本:

1,破解VIP会员视频集合,目前里里面的 “石头解析“,”无名小站“,”vip看看 ”可以解析爱奇艺等的视屏网站的会员视频

  1. // ==UserScript==
  2. // @name 破解VIP会员视频集合
  3. // @namespace https://greasyfork.org/zh-CN/users/104201
  4. // @version 4.2.5
  5. // @description 一键破解[优酷|腾讯|乐视|爱奇艺|芒果|AB站|音悦台]等VIP或会员视频,解析接口贵精不贵多,绝对够用。详细方法看说明和图片。包含了[一键VIP视频解析、去广告(全网) xxxx-xx-xx 可用?mark zhang][VIP视频在线解析破解去广告(全网)xx.xx.xx更新可用?sonimei134][破解全网VIP视频会员-去广告?ttmsjx][VIP会员视频解析?龙轩][酷绘-破解VIP会员视频?ahuiabc2003]以及[VIP视频破解?hoothin]的部分接口。[Tampermonkey | Violentmonkey | Greasymonkey 4.0+]
  6. // @author 黄盐
  7. // require https://greasemonkey.github.io/gm4-polyfill/gm4-polyfill.js
  8. // @noframes
  9. // @match *://*.iqiyi.com/*
  10. // @match *://*.youku.com/*
  11. // @match *://*.le.com/*
  12. // @match *://*.letv.com/*
  13. // @match *://v.qq.com/*
  14. // @match *://*.tudou.com/*
  15. // @match *://*.mgtv.com/*
  16. // @match *://film.sohu.com/*
  17. // @match *://tv.sohu.com/*
  18. // @match *://*.acfun.cn/v/*
  19. // @match *://*.bilibili.com/*
  20. // @match *://vip.1905.com/play/*
  21. // @match *://*.pptv.com/*
  22. // @match *://v.yinyuetai.com/video/*
  23. // @match *://v.yinyuetai.com/playlist/*
  24. // @match *://*.fun.tv/vplay/*
  25. // @match *://*.wasu.cn/Play/show/*
  26. // @match *://*.56.com/*
  27. // @exclude *://*.bilibili.com/blackboard/*
  28. // @grant GM.getValue
  29. // @grant GM.setValue
  30. // @grant GM_getValue
  31. // @grant GM_setValue
  32. // @grant unsafeWindow
  33. // @grant GM_xmlhttpRequest
  34. // @grant GM.xmlHttpRequest
  35. // @grant GM_openInTab
  36. // @grant GM.openInTab
  37. // ==/UserScript==
  38.  
  39. (() => {
  40. 'use strict';
  41. 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>';
  42. const VQQIcon = '<svg height="1.2em" width="1.2em" viewbox="0 0 185 170"><defs><path id="vQQ" d="M7 20Q14 -10 55 7Q100 23 145 60Q170 80 145 102Q108 138 47 165Q15 175 4 146Q-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>';
  43. var tMscript = document.createElement('script');
  44. tMscript.innerText = `q = function(cssSelector){return document.querySelector(cssSelector);};qa = function(cssSelector){return document.querySelectorAll(cssSelector);};`;
  45. document.head.appendChild(tMscript);
  46. window.q = function(cssSelector) {return document.querySelector(cssSelector);};
  47. window.qa = function(cssSelector) {return document.querySelectorAll(cssSelector);};
  48. window.makeEl = function(tag){return document.createElement(tag);};
  49. /* 兼容 Tampermonkey | Violentmonkey | Greasymonkey 4.0+ */
  50. function GMaddStyle(cssText){
  51. let a = document.createElement('style');
  52. a.textContent = cssText;
  53. let doc = document.head || document.documentElement;
  54. doc.appendChild(a);
  55. }
  56. /* 兼容 Tampermonkey | Violentmonkey | Greasymonkey 4.0+
  57. * 为了兼容GreasyMonkey 4.0 获取结构化数据,比如 json Array 等,
  58. * 应当先将字符串还原为对象,再执行后续操作
  59. * GMgetValue(name,defaultValue).then((result)=>{
  60. * let result = JSON.parse(result);
  61. * // other code...
  62. * };
  63. */
  64. function GMgetValue(name, defaultValue) {
  65. if (typeof GM_getValue === 'function') {
  66. return new Promise((resolve, reject) => {
  67. resolve(GM_getValue(name, defaultValue));
  68. // reject();
  69. });
  70. } else {
  71. return GM.getValue(name, defaultValue);
  72. }
  73. }
  74. /* 兼容 Tampermonkey | Violentmonkey | Greasymonkey 4.0+
  75. * 为了兼容GreasyMonkey 4.0 储存结构化数据,比如 json Array 等,
  76. * 应当先将对象字符串化,
  77. * GMsetValue(name, JSON.stringify(defaultValue))
  78. */
  79. function GMsetValue(name, defaultValue) {
  80. if (typeof GM_setValue === 'function') {
  81. GM_setValue(name, defaultValue);
  82. } else {
  83. GM.setValue(name, defaultValue);
  84. }
  85. }
  86. function GMxmlhttpRequest(obj){
  87. if (GM_xmlhttpRequest === "function") {
  88. GM_xmlhttpRequest(obj);
  89. } else{
  90. GM.xmlhttpRequest(obj);
  91. }
  92. }
  93. var replaceRaw, /*是否嵌入当前页面*/
  94. episodes, /*是否启用爱奇艺正确选集*/
  95. userApisOn; /*是否加载自定义解析接口*/
  96. GMaddStyle(`
  97. /*TMHY:TamperMonkeyHuanYan*/
  98. #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);}
  99. /*TMHYVideoContainer*/
  100. #TMHYvideoContainer button{top:.1em;cursor:pointer;visibility:hidden;font-size:3em;color:#fff;background:transparent;border:0;}
  101. #TMHYvideoContainer:hover button{visibility:visible;}
  102. #TMHYvideoContainer:hover button:hover{color:#ff0;}
  103. #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;}
  104. /*TMHYIframe*/
  105. #TMHYul{position:fixed;top:5em;left:0;padding:0;z-index:999999;}
  106. #TMHYul li{list-style:none;}
  107. #TMHYul svg{float:right;}
  108. .TM1{opacity:0.3;position:relative;padding-right:.5em;width:1.5em;cursor:pointer;}
  109. .TM1:hover{opacity:1;}
  110. .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;}
  111. .TM3{position:absolute;top:0;left:1.5em;display:none;border-radius:.3em;margin:0;padding:0;}
  112. .TM3 li{float:none;width:6em;margin:0;font-size:1em;padding:.15em 1em;cursor:pointer;color:#3a3a3a!important;background:rgba(255,255,0,0.8);}
  113. .TM3 li:hover{color:white!important;background:rgba(0,0,0,.8);}
  114. .TM3 li:last-child{border-radius:0 0 .35em .35em;}
  115. .TM3 li:first-child{border-radius:.35em .35em 0 0;}
  116. .TM1:hover .TM3{display:block;}
  117. /*自定义解析接口,本页播放窗口设置*/
  118. .TMHYp {position:fixed;top:20%;left:20%;z-index:999999;background:yellow;padding:30px 20px 10px 20px;border-radius:10px;text-align:center;}/*TMHYpanel*/
  119. .TMHYp * {font-size:16px;background:rgba(255,255,0,1);font-family:'微软雅黑';color:#3a3a3a;border-radius:10px;}
  120. #tMuserDefine li {margin:5px;width:100%;list-style-type:none;}
  121. .TMHYp input[type=text] {border-radius:5px !important;border:1px solid #3a3a3a;margin:2px 10px 2px 5px;padding:2px 5px;}
  122. .TMHYlti {width:350px;}/*TMHYlongTextInput*/
  123. .TMHYmti {width:160px;}/*TMHYmti*/
  124. .idelete {float: left; display: inline-block; color: red; padding: 0 20px !important; cursor: pointer;}
  125. .iname {padding-right:10px;}
  126. li:hover .idelete,li:hover .ilink,li:hover .iname {background:rgba(224,175,17,0.62);}
  127. .TMHYp button {border:1px solid #3a3a3a;border-radius:5px;cursor:pointer;padding: 2px 10px;margin:10px 20px 0 20px;}
  128. .TMHYp button:hover {background:#3a3a3a;color:yellow;}
  129. .TMHYClose {position:absolute;top:0;left:0;margin:0!important;}
  130. .TMHYp fieldset {margin:0;padding:10px;}
  131. .TMHYp legend {padding:0 10px;}
  132. .TMHYp label {display:inline-block;}
  133. .TMHYspan80 {display:inline-block;text-align:right;width:80px;}
  134. .TMHYspan120 {display:inline-block;text-align:right;width:120px;}
  135. #inTabSettingSave {position:relative;margin-top:10px;padding:3px 20px;}
  136. `);
  137. var defaultapi = {
  138. title: "龙轩脚本的接口,默认用浮空解析,失效请更换接口",
  139. url: "http://goudidiao.com/?url="
  140. };
  141. //apis name:显示的文字 url:接口 title:提示文字 intab:是否适合内嵌(嵌入判断:GMgetValue("replaceRaw",false)值||intab值)
  142. var apis =[
  143. {name:"够低调",url:"http://goudidiao.com/?url=",title:"转圈圈就换线路",intab:1},
  144. {name:"百域阁",url:"http://api.baiyug.cn/vip/index.php?url=",title:"转圈圈就换线路",intab:1},
  145. {name:"搜你妹"+YoukuIcon,url:"http://www.sonimei.cn/?url=",title:"综合接口,VIP视频*** 更新可用【作者sonimei134】脚本的接口",intab:0},
  146. {name:"玩的嗨"+YoukuIcon,url:"http://tv.wandhi.com/go.html?url=",title:"综合接口,一键VIP*** 更新可用【作者mark zhang】脚本的接口",intab:0},
  147. {name:"vParse"+VQQIcon,url:"https://api.vparse.org/?url=",title:"支持腾讯",intab:1},
  148. {name:"猫云"+VQQIcon,url:"https://jx.maoyun.tv/index.php?id=",title:"支持腾讯",intab:1},
  149. {name:"噗噗电影",url:"http://pupudy.com/play?make=url&id=",title:"综合接口,破解全网VIP视频会员-去广告【作者ttmsjx】脚本的接口",intab:0},
  150. {name:"抢先影院"+YoukuIcon,url:"http://www.qxyingyuan.vip/play?make=url&id=",title:"据说优酷比较稳定",intab:0},
  151. {name:"酷绘",url:"http://appapi.svipv.kuuhui.com/svipjx/liulanqichajian/browserplugin/qhjx/qhjx.php?id=",title:"综合接口,酷绘*【作者ahuiabc2003】脚本的接口",intab:0},
  152. {name:"旋风解析",url:"http://api.xfsub.com/index.php?url=",title:"1905优先使用",intab:1},
  153. {name:"石头解析",url:"https://jiexi.071811.cc/jx.php?url=",title:"手动点播放",intab:1},
  154. {name:"无名小站",url:"http://www.sfsft.com/admin.php?url=",title:"无名小站同源",intab:1},
  155. {name:"VIP看看",url:"http://q.z.vip.totv.72du.com/?url=",title:"更换线路成功率会提高",intab:1},
  156. {name:"ODFLV",url:"http://aikan-tv.com/?url=",title:"不稳定,广告过滤软件可能有影响",intab:1},
  157. {name:"163人",url:"http://jx.api.163ren.com/vod.php?url=",title:"偶尔支持腾讯",intab:1},
  158. //{name:"CKFLV",url:"http://www.0335haibo.com/tong.php?url=",title:"CKFLV云,部分站点不支持",intab:1},
  159. {name:"无名小站2",url:"http://www.wmxz.wang/video.php?url=",title:"转圈圈就换线路",intab:1},
  160. //{name:"眼睛会下雨",url:"http://www.vipjiexi.com/yun.php?url=",title:"www.vipjiexi.com",intab:1},
  161. {name:"人人发布",url:"http://v.renrenfabu.com/jiexi.php?url=",title:"综合,多线路",intab:0}
  162. ];
  163. //嵌入页面播放
  164. function openInTab(evt) {
  165. // 找到支持的方法, 使用需要全屏的 element 调用
  166. function launchFullScreen(element) {
  167. if(element.requestFullscreen) {
  168. element.requestFullscreen();
  169. } else if(element.mozRequestFullScreen) {
  170. element.mozRequestFullScreen();
  171. } else if(element.webkitRequestFullscreen) {
  172. element.webkitRequestFullscreen();
  173. } else if(element.msRequestFullscreen) {
  174. element.msRequestFullscreen();
  175. }
  176. }
  177. if(evt.target.dataset.intab === ''){
  178. //如果页面有播放窗口,只需更新播放窗口的 src, 如果没有播放窗口,读取播放窗口位置信息,新建一个播放窗
  179. if(q('#TMHYiframe') === null){
  180. GMgetValue('intabSize','{"height":"","width":"","left":"","top":""}').then((position)=>{
  181. var sty = JSON.parse(position);
  182. sty = 'height:'+sty.height+';width:'+sty.width+';left:'+sty.left+';top:'+sty.top+';';
  183. var a = makeEl('div');
  184. a.id = 'TMHYvideoContainer';
  185. a.setAttribute('style', sty);
  186. a.innerHTML = '<button title="关闭" id="TMHYIframeClose">🗙</button><button id="TMHYfullScreen" title="全屏">🗖</button>';
  187. document.body.appendChild(a);
  188. var b=makeEl('iframe');
  189. b.id='TMHYiframe';
  190. b.src=evt.target.dataset.url + location.href;
  191. q('#TMHYvideoContainer').appendChild(b);
  192. q('#TMHYIframeClose').addEventListener('click', ()=>{document.body.removeChild(q('#TMHYvideoContainer'));}, false);
  193. q('#TMHYfullScreen').addEventListener('click', ()=>{launchFullScreen(q('#TMHYiframe'));}, false);
  194. });
  195. } else{
  196. q('#TMHYiframe').src=evt.target.dataset.url + location.href;
  197. }
  198. } else{
  199. //不适合页内播放的,打开新标签
  200. window.open(evt.target.dataset.url + location.href);
  201. }
  202. }
  203. //保存嵌入页面大小位置设置
  204. function saveInTabSetting(){
  205. var intabSize = {
  206. height:q('#TMpH').value,
  207. width:q('#TMpW').value,
  208. left:q('#TMpL').value,
  209. top:q('#TMpT').value
  210. };
  211. GMsetValue('intabSize', JSON.stringify(intabSize));
  212. setTimeout('document.body.removeChild(q("#TMHYSetting"));', 30);
  213. }
  214. //生成"嵌入页面大小位置设置"面板
  215. function intabSetting(){
  216. var intabSize = GMgetValue('intabSize','{"height":"","width":"","left":"","top":""}')
  217. .then((ag)=>{
  218. var a = makeEl('div');
  219. a.id='TMHYSetting';
  220. a.setAttribute('class', 'TMHYp');
  221. a.innerHTML = `
  222. <button class="TMHYClose" onclick="document.body.removeChild(this.parentNode)">&#128473;</button>
  223. <fieldset>
  224. <legend>页内播放窗口位置大小</legend>
  225. <label for="TMpH"><span class="TMHYspan80">高度</span><input type="text" id="TMpH" value="${intabSize.height}" class="TMHYmti" placeholder='如"300px"或者"65%"'/></label>
  226. <label for="TMpW"><span class="TMHYspan80">宽度</span><input type="text" id="TMpW" value="${intabSize.width}" class="TMHYmti" placeholder='如"300px"或者"65%"'/></label><br />
  227. <label for="TMpL"><span class="TMHYspan80">左边距</span><input type="text" id="TMpL" value="${intabSize.left}" class="TMHYmti" placeholder='如"300px"或者"65%"'/></label>
  228. <label for="TMpT"><span class="TMHYspan80">上边距</span><input type="text" id="TMpT" value="${intabSize.top}" class="TMHYmti" placeholder='如"300px"或者"65%"'/></label>
  229. </fieldset>
  230. <button onclick="(function(){var a=getComputedStyle(q('#TMHYvideoContainer'));q('#TMpH').value=a.height,q('#TMpW').value=a.width,q('#TMpL').value=a.left,q('#TMpT').value=a.top;})()">获取当前播放窗尺寸</button>
  231. <button id="intabSettingPreview" onclick="(function(){a=q('#TMHYvideoContainer').style.cssText='height:'+q('#TMpH').value+';width:'+q('#TMpW').value+';left:'+q('#TMpL').value+';top:'+q('#TMpT').value+';';})()">预览</button>
  232. <button id="intabSettingSave">保存</button>
  233. `;
  234. document.body.appendChild(a);
  235. q('#intabSettingSave').addEventListener('click', saveInTabSetting, false);
  236. });
  237. }
  238. //检查是否勾选页内解析
  239. function noNewTabCheck() {
  240. var x, arr = qa(".TM4 li");
  241. replaceRaw = q("#intabChekbx").checked;
  242. GMsetValue("replaceRaw", replaceRaw);
  243. for (x = 0; x < arr.length; x++) {
  244. if (replaceRaw) {
  245. arr[x].addEventListener("click", openInTab, false);
  246. arr[x].setAttribute('onclick', '');
  247. } else {
  248. arr[x].removeEventListener("click", openInTab, false);
  249. arr[x].setAttribute('onclick', 'window.open(this.dataset.url + location.href)');
  250. }
  251. }
  252. }
  253. /* 爱奇艺正确选集 */
  254. function rightEpsLinkCheck() {
  255. episodes = q("#realLinkChekbx").checked;
  256. GMsetValue("episodes", episodes);
  257. try {
  258. if (episodes) {
  259. q('#widget-dramaseries').addEventListener('click', function getLink(e) {
  260. //-------------iqiyi剧集真实播放页面方法 Begin------------------
  261. //Code piece infomation:
  262. //License:MIT Author:hoothin Homepage: http://hoothin.com Email: rixixi@gmail.com
  263. 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);
  264. if (target.tagName != "LI") return;
  265. GMxmlhttpRequest({
  266. method: 'GET',
  267. url: "http://cache.video.qiyi.com/jp/vi/" + target.dataset.videolistTvid + "/" + target.dataset.videolistVid + "/?callback=crackIqiyi",
  268. onload: function(result) {
  269. var crackIqiyi = function(d) {
  270. location.href = d.vu;
  271. };
  272. eval(result.responseText);
  273. }
  274. });
  275. });
  276. //-------------iqiyi剧集真实播放页面方法 End------------------
  277. } else {
  278. q('#widget-dramaseries').removeEventListener('click', getLink);
  279. }
  280. } catch(e) {}
  281. }
  282. /* 勾选自定义接口 */
  283. function addApiCheck() {
  284. userApisOn = q('#addApiChekBx').checked;
  285. GMsetValue('userApisOn', userApisOn);
  286. if(userApisOn) {
  287. selfDefine();
  288. setTimeout(showAddApiPanel, 200);
  289. }
  290. }
  291. /* 执行 */
  292. var div = makeEl("div");
  293. div.id = "TMHYd";
  294. var txt = '', i = 0;
  295. /*提供的接口列表*/
  296. for (i in apis) {
  297. 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>`;
  298. }
  299. div.innerHTML = `
  300. <ul id="TMHYul">
  301. <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>
  302. <li class="TM1"><span id="TMSet">?</span><ul class="TM3">
  303. <li><label><input type="checkbox" id="intabChekbx">本页解析</label></li>
  304. <li><label><input type="checkbox" id="realLinkChekbx">爱奇艺正确选集</label></li>
  305. <li><input type="checkbox" id="addApiChekBx"><label id="addApiBtn">增加接口</label></li>
  306. <li><label id="intabSettingBtn">本页播放设置</label></li>
  307. </ul></li>
  308. </ul>
  309. `;
  310. document.body.appendChild(div);
  311. q("#addApiChekBx").addEventListener('change', addApiCheck, false);
  312. // q("#addApiChekBx").addEventListener('click', addApiCheck, false);
  313. GMgetValue('userApisOn',false)
  314. .then((ag)=>{
  315. userApisOn = ag;
  316. q("#addApiChekBx").checked = userApisOn;
  317. /*看看是否需要加载自定义的接口列表*/
  318. if (userApisOn) {
  319. GMgetValue('userApis', "[{}]").then((ag1)=>{
  320. var userApis = JSON.parse(ag1), txt='';
  321. for (var j in userApis) {
  322. try {
  323. if (userApis[j].link !== null) {
  324. 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>`;
  325. }
  326. } catch (e) {/*console.log(e);*/}
  327. }
  328. q('ul.TM3.TM4').innerHTML = txt + q('ul.TM3.TM4').innerHTML;
  329. selfDefine();
  330. });
  331. }
  332. })
  333. .then(()=>{
  334. q("#intabChekbx").addEventListener("click", noNewTabCheck, false);
  335. GMgetValue('replaceRaw',false).then((ag)=>{
  336. replaceRaw = ag;
  337. q("#intabChekbx").checked = replaceRaw;
  338. if (replaceRaw) {
  339. noNewTabCheck();
  340. }
  341. });
  342. q("#realLinkChekbx").addEventListener("click", rightEpsLinkCheck, false);
  343. GMgetValue('episodes',false).then((ag)=>{
  344. episodes = ag;
  345. q("#realLinkChekbx").checked = episodes;
  346. if (episodes && window.location.href.indexOf("iqiyi") != -1) {
  347. rightEpsLinkCheck();
  348. }
  349. });
  350. q("#addApiBtn").addEventListener('click', showAddApiPanel, false);
  351. q("#intabSettingBtn").addEventListener('click', intabSetting, false);
  352. });
  353.  
  354. /** 2017-10-24 自定义解析接口 */
  355. /* 显示增加接口的面板 */
  356. function showAddApiPanel() {
  357. if (q('#tMuserDefine')) {
  358. q('#tMuserDefine').style.display = "block";
  359. } else {
  360. alert(`(● ̄(?) ̄●)づ\n\n未启用[增加接口]功能\n请把 '?增加接口'→'?增加接口'!`);
  361. }
  362. }
  363. /* 生成增加接口面板 */
  364. function selfDefine() {
  365. var a = makeEl('div');
  366. a.id = 'tMuserDefine';
  367. a.setAttribute('class', 'TMHYp');
  368. a.setAttribute('style', 'display:none');
  369. var txt = `
  370. <button class="TMHYClose" onclick="q('#tMuserDefine').style.display='none';">??</button>
  371. <li><span class="TMHYspan120">解析接口名称:</span><input type="text" id="tMname" class="TMHYlti" placeholder="显示的名称"></li>
  372. <li><span class="TMHYspan120">解析接口地址:</span><input type="text" id="tMparseLink" class="TMHYlti" placeholder="接口需要包含 http 或者 https"></li>
  373. <li><span class="TMHYspan80">本页解析:</span><label for="tMintabckbx"><input type="checkbox" id="tMintabckbx"/>适合</label></li>
  374. <li id="tMbtnLi">
  375. <button id="tMgo" onclick="window.open(q('#tMparseLink').value+location.href)">测试</button>
  376. <button id="tMadd">增加</button>
  377. <button id="tMsave">保存</button>
  378. </li>
  379. `;
  380. GMgetValue('userApis', "[{}]").then((ag)=>{
  381. var ar = JSON.parse(ag),d;
  382. try {
  383. if (ar[].name !== undefined) {
  384. for (var i = 0; i < ar.length; i++) {
  385. d = (ar[i].intab==="1")?'checked':'';
  386. 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>`;
  387. }
  388. }
  389. } catch (e) {}
  390. a.innerHTML = txt;
  391. document.body.appendChild(a);
  392. /*事件绑定*/
  393. q('#tMsave').addEventListener('click', function() {
  394. var newParseLinks = getarr();
  395. GMsetValue('userApis', JSON.stringify(newParseLinks));
  396. console.log(newParseLinks);
  397. }, false);
  398. q('#tMadd').addEventListener('click', function() {
  399. if (q('#tMname').value || q('#tMparseLink').value) {
  400. var b = q("#tMintabckbx").checked?"1":"0";
  401. var c = q("#tMintabckbx").checked?"checked":"";
  402. var a = makeEl('li');
  403. a.innerHTML = `<span class="idelete" title="删除" onclick="document.getElementById('tMuserDefine').removeChild(this.parentNode)">?</span><input class="icheck" type="checkbox" ${c}><span class="iname">${q('#tMname').value}:</span><span class="ilink">${q('#tMparseLink').value}</span>`;
  404. if (q('span[class=iname]') === null) {
  405. q('#tMuserDefine').appendChild(a);
  406. q('#tMname').value = '';
  407. q('#tMparseLink').value = '';
  408. } else {
  409. q('#tMuserDefine').insertBefore(a, q('span[class=iname]').parentNode);
  410. q('#tMname').value = '';
  411. q('#tMparseLink').value = '';
  412. }
  413. }
  414. }, false);
  415. });
  416. }
  417. /* 保存按钮执行函数:获取值并 await GM.setValue() */
  418. function getarr() {
  419. var userUrl = qa('.ilink');
  420. var urlarr = [], tMname, tMparseLink, tMintabckbx;
  421. tMname = q('#tMname').value;
  422. tMparseLink = q('#tMparseLink').value;
  423. tMintabckbx = q('#tMintabckbx').checked?1:0;
  424. if (tMname || tMparseLink) {
  425. urlarr.push({ name: tMname, link: tMparseLink, intab:tMintabckbx });
  426. }
  427. for (var i = 0; i < userUrl.length; i++) {
  428. var n, t, l;
  429. t = userUrl[i].innerText;
  430. n = userUrl[i].previousSibling.innerText;
  431. l = userUrl[i].previousSibling.previousSibling.checked?'':'';
  432. urlarr.push({ name: n, link: t,intab:l });
  433. }
  434. return urlarr;
  435. }
  436. /** 2017-10-24 自定义解析接口 END */
  437.  
  438. })();
  439.  
  440. // 资源参考http://www.5ifxw.com/vip/
  441. // 资源参考http://live.gopartook.com/
  442. // 资源参考http://tv.dsqndh.com
  443. // 资源参考http://51.ruyo.net/p/3127.html
  444. //有效性未知||不能直接引用接口
  445. //http://www.yydy8.com/common/?url=
  446. //href="http://mt2t.com/yun?url=
  447. //https://api.47ks.com/webcloud/?v=
  448. //http://www.guqiankun.com/tools/vipvideo
  449. //{name:"PU.tn",url:"http://api.pu.tn/qq1/?url=",title:"据说可以看优酷布袋游戏",intab:0},
  450. // {name:"舞动秋天",url:"http://qtzr.net/s/?qt=",title:"qtzr.net",intab:1},
  451. //过期接口
  452. //{name:"65YW",url:"http://www.65yw.com/65yw/?vid=",title:"新接口,稳定性未知"},
  453. //{name:"紫狐",url:"http://yun.zihu.tv/play.html?url=",title:"效果可能不稳定"},
  454. //{name:"云解析",url:"http://www.efunfilm.com/yunparse/index.php?url=",title:"新接口,稳定性未知"},
  455. //{name:"妹儿云",url:"https://www.yymeier.com/api.php?url=",title:"不稳定"}
  456. //{name:"V云[腾讯]",url:"http://www.viyun.me/jiexi.php?url=",title:"腾讯首选"},
  457. //{name:"1008影视"+YoukuIcon,url:"http://api.1008net.com/v.php?url=",title:"据说可以看布袋游戏视频",intab:1},
  458. //{name:"FLVSP[腾讯]",url:"https://api.flvsp.com/?url=",title:"支持腾讯",intab:1},//解析源同上

浏览器插件--TamperMonkey的更多相关文章

  1. 发现新世界:神级浏览器插件TamperMonkey(暴力猴)

    由于谷歌浏览器各种受限 于是我就先使用火狐浏览器尝试此插件 步骤非常简单. 1.在火狐浏览器内打开如下网址:https://addons.mozilla.org/zh-CN/firefox/addon ...

  2. chrome内核浏览器插件的使用--Tampermonkey(油猴插件)

    Tampermonkey(油猴插件),这个插件是一个用于改造你浏览器打开的网站的插件.它可以在你打开的网页中注入任意js脚本,以达到你想要的外加功能.可以说非常不错.很多时候也值得使用. 这是个chr ...

  3. Tampermonkey油猴脚本管理插件-最强浏览器插件的安装使用全攻略

      对于接触过谷歌浏览器插件的“玩家”们来说,应该没有人没听说过Tampermonkey用户脚本管理器,也就是中文所说的“油猴”这个chrome插件了. 油猴号称全商店最强的浏览器插件绝非浪得虚名,一 ...

  4. 浏览器插件之王-Tampermonkey(油猴脚本)

    大家电脑都在使用浏览器,相信大家对浏览器插件也不陌生,浏览器插件是安装在浏览器里面,对浏览器功能进行拓展的脚本,现在的主流浏览器都有各种各样的插件如图: 这些插件让我们的上网方便了许多,有去广告的插件 ...

  5. 还在为百度网盘下载速度太慢烦恼?chrome浏览器插件帮你解决!

    百度网盘已然成为分享型网盘中一家独大的“大佬”了.时代就是这样不管你喜不喜欢,上网总会遇到些百度网盘共享的文件需要下载.然而,百度网盘对免费用户的限速已经到了“感人”的地步了,常常十多KB/秒的速度真 ...

  6. chrome最强大的浏览器插件推荐,只要你会用其他的插件你可以删除了

    我们在学习和工作中经常会需要用到各种各样不同需求的插件,结果chrome插件越装越多,chrome浏览器也越来越慢!有时候链我们自己都懵圈了,一时间都想不起来这个插件是干什么用的.更可气的是,很多时候 ...

  7. 一、奇妙插件Tampermonkey的简单安装教程

    奇妙插件Tampermonkey的简单安装教程 1.下载 对于浏览器而言,一般的功能并不能满足"特殊用户的需求".这时候就须要插件来帮忙了.那么讲到插件的支持多又常见的浏览器必定要 ...

  8. windows下使用火狐浏览器插件AutoProxy+MyEnTunnel+SSH访问海外站点(转)

    windows下使用火狐浏览器插件AutoProxy+MyEnTunnel+SSH访问海外站点   平时需要查阅一些技术资料,光走VPN太浪费流量,所以这儿教大家一种使用火狐浏览器的插件 AutoPr ...

  9. php开发工具之火狐浏览器插件

    相信做开发的都有一种火狐情怀吧!  下面来介绍下一些自己在php开发工程中用到几个火狐浏览器插件. 1.[firebug]: 这个插件可以说是一个神奇,功能不用过对介绍. 2.[hostAdmin]: ...

随机推荐

  1. jquery 使用ajax,正常返回后,不执行success的问题

    背景: 在使用到jQuery的ajax时,如果指定了dataType为json,老是不执行success回调,而是执行了error回调函数. 原因: 然后继续下载了几个jquery版本,如1.3.2, ...

  2. cocos2d-js实现 双击android后退按钮 即退出游戏

    之前测了一下android自带的后退按钮,用在cocos2d-js中是没有获取到的 (可能是cocos2d-js已经把android的后退事件截取了,所以原生java代码没有用), 没办法就只能用co ...

  3. Kotlin基本语法笔记之函数、变量的定义及null检测

    定义函数 fun sum(a: Int, b: Int): Int { return a + b } 该函数中两个参数的类型都是Int,返回类型是Int 也可以做如下简化 fun sum(a: Int ...

  4. [数据挖掘课程笔记]基于规则的分类-顺序覆盖算法(sequential covering algorithm)

    Rule_set = {}; //学习的规则集初试为空 for 每个类c do repeat Rule = Learn_One_Rule(D,Att-vals,c) 从D中删除被Rule覆盖的元组; ...

  5. android studio导入项目出现的奇葩错误

    1.Error:(1, 0) Cause: com/android/build/gradle/AppPlugin : Unsupported major.minor version 52.0

  6. x264 FFmpeg Options Guide

    https://sites.google.com/site/linuxencoding/x264-ffmpeg-mapping x264 FFmpeg Options Guide Please Not ...

  7. servlet串行拦截器实现例子

    至于串行过滤器有什么作用,我实在不知.我的理解是它只是说明 过滤器的串行运行方式 需求:当用户没有登录访问更新页面的时候,跳转到登录页面 1.登录页面:login.jsp <%@ page la ...

  8. php排序方法之冒泡排序

    //冒泡排序法 $arr = array(3,55,45,2,67,76,6.7,-65,85,4); function bubblingSort($arr){ for ( $i=0; $i<c ...

  9. hdu-5761 Rower Bo(数学)

    题目链接: Rower Bo Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 131072/131072 K (Java/Others ...

  10. hdu-5665 Lucky(水题)

    题目链接: Lucky Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others) Pro ...