您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
添加jav官方预览影片 基于作者:BigDiao jav_preview作品Version 0.1.1 修改前版本地址 https://greasyfork.org/zh-CN/scripts/389271-jav-preview
// ==UserScript== // @author xm superman // @name jav_preview_new // @version 0.0.6 // @include http*://*javbus.com/* // @include *://www.*bus*/* // @include *://www.*dmm*/* // @include http*://*javlibrary.com/*/?v=* // @include *://*/movie/* // @include *://*/cn* // @include *://*/tw* // @include *://*/ja* // @include *://*/en* // @description 添加jav官方预览影片 基于作者:BigDiao jav_preview作品Version 0.1.1 修改前版本地址 https://greasyfork.org/zh-CN/scripts/389271-jav-preview // @grant GM_xmlhttpRequest // @namespace https://greasyfork.org/zh-CN/scripts/429188-jav-preview-new // ==/UserScript== // 根据网站域名判断视频插入位置 const domain = document.domain var javbus_domains = ["www.javbus.com", "www.javbus.icu", "www.dmmsee.icu", "www.busjav.icu", ] var javlibrary_domains = ["www.javlibrary.com", "m34z.com", ] var $position var $adtablePostiton var $imgTab if (javbus_domains.indexOf(domain) != -1) { //$position = document.querySelector('#mag-submit-show') $position = document.querySelector('#sample-waterfall') $adtablePostiton = document.querySelector('#mag-submit-show') $imgTab = document.querySelector('.bigImage').href } else if (javlibrary_domains.indexOf(domain) != -1) { $position = document.querySelector('#video_favorite_edit') } if (!$position&&!$adtablePostiton) return // add meta function addmeta() { var oMeta = document.createElement('meta'); oMeta.setAttribute("http-equiv", "Content-Security-Policy") oMeta.setAttribute("content", "upgrade-insecure-requests") document.getElementsByTagName('head')[0].appendChild(oMeta); } // request with customer headers function request(url) { return new Promise(resolve => { GM_xmlhttpRequest({ url, method: 'GET', headers: { "Cache-Control": "no-cache", "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Mobile Safari/537.36", }, timeout: 30000, onload: response => { //console.log(url + " reqTime:" + (new Date() - time1)); resolve(response); }, onabort: (e) => { console.log(url + " abort"); resolve("wrong"); }, onerror: (e) => { console.log(url + " error"); console.log(e); resolve("wrong"); }, ontimeout: (e) => { console.log(url + " timeout"); resolve("wrong"); }, }); }); } // GM_xmlhttpRequest promise wrapper const gmFetch = url => new Promise((resolve, reject) => { GM_xmlhttpRequest({ url: url, method: 'GET', onload: resolve, onerror: reject }) }) const parseHTML = str => { const tmp = document.implementation.createHTMLDocument() tmp.body.innerHTML = str return tmp } const avid = document.title.replace(/([^-]+)-([^ ]+) .*/, '$1-$2') const preview = async () => { const srcs = src => ['dmb', 'dm', 'sm'] .map(i => src.replace(/_(dmb|dm|sm)_/, `_${i}_`)) .map(i => `<source src=${i}></source>`) .join('') const xrmoo = async () => { let tmpAvid = avid.replace('-',' '); const res = await gmFetch( `http://dmm.xrmoo.com/sindex.php?searchstr=${tmpAvid}` ) try { const video_tag = parseHTML(res.responseText).querySelector('a.link.viewVideo') console.log(video_tag) const src = video_tag.getAttribute('data-link') //const video_tag = parseHTML(res.responseText).querySelector('div.card-footer').querySelector("a:nth-child(3)") //const src = video_tag.getAttribute('href') console.log('xrmoo', src) return src } catch (err) { console.log("获取xrmoo视频地址出现错误", err) const src = "" return src } } const r18 = async () => { const res = await gmFetch( `https://www.r18.com/common/search/order=match/searchword=${avid}` ) try { const video_tag = parseHTML(res.responseText).querySelector('.js-view-sample') const src = ['low', 'med', 'high'] .map(i => video_tag.getAttribute('data-video-' + i)) .find(i => i) console.log('r18', src) return src } catch (err) { console.log("获取r18视频地址出现错误", err) const src = "" return src } } const dmm = async () => { const res = await request( `https://www.dmm.co.jp/search/=/searchstr=${avid}` ) if (res.finalUrl == "http://www.dmm.co.jp/top/-/error/area/") { const src = "" return src } try { const video_tag = parseHTML(res.responseText).querySelector('.play-btn') const src = video_tag.getAttribute('href') console.log('dmm', src) return src } catch (err) { console.log('获取dmm视频出现错误:', err) const src = "" return src } } // erovi.jp const GoogleUrl = `https://www.google.com/search?num=6&q=allintitle:${avid} site:https://erovi.jp&safe=images&pws=0&lr=lang_ja` const erovi = async () => { const res = await gmFetch(GoogleUrl) const doc = parseHTML(res.responseText) if (doc.querySelector('#topstuff > div')) { let src = "" return src } const url = [...doc.querySelectorAll('.g .r a')].map(i => i.href) const regex = /https:\/\/erovi\.jp\/item\/.*\.html/gm; let m; let eroviLinks = [] // filter match urls for (let i in url) { while ((m = regex.exec(url[i])) !== null) { if (m.index === regex.lastIndex) { regex.lastIndex++; } m.forEach((match, groupIndex) => { // console.log(`Found match, group ${groupIndex}: ${match}`); eroviLinks.push(match) }); } } // request for video if (eroviLinks.length != 0) { try { const res2 = await gmFetch(eroviLinks[0]) const src = parseHTML(res2.responseText).querySelector('video').src console.log('erovi.jp', src) return src } catch (err) { console.log("获取erovi.jp视频地址出现错误", err) const src = "" return src } } } let src var getVideo = false if (getVideo == false) { let r18src = await r18() if (r18src != "") { console.log("r18预览视频获取成功") src = srcs(r18src) getVideo = true } else { console.log("r18预览视频获取失败,尝试使用erovi.jp源,请确保代理能够访问该网站") } } if (getVideo == false) { let dmmsrc = await dmm() if (dmmsrc != "") { console.log("dmm预览视频获取成功") src = srcs(dmmsrc) getVideo = true } else { console.log("dmm预览视频获取失败,请检查IP是否为日本并确保番号正确") } } if (getVideo == false) { let xrmoosrc = await xrmoo() if (xrmoosrc != "") { console.log("从 xrmoo 获取预览视频获取成功") src = srcs(xrmoosrc) getVideo = true } else { console.log("从 xrmoo 获取预览视频获取失败,尝试使用r18源,请确保代理能够访问该网站") } } if (getVideo == false) { let erovisrc = await erovi() if (erovisrc != "") { console.log("erovi.jp预览视频获取成功") src = srcs(erovisrc) getVideo = true } else { console.log("erovi.jp预览视频获取失败,请检查IP是否可访问该网站并确保番号正确") console.log("尝试使用dmm源,请切换为日本IP") } } const html = src ? `<video id=jav_preview style='postiton:absolute;z-order:1;display:none;width:85%' controls preload=true defaultMuted=false>${src}</video>` : '<div id=jav_preview class=header style="text-align:center;padding-top:1rem;">preview not found</div>' //$position.insertAdjacentHTML('afterBegin', html) if (javbus_domains.indexOf(domain) != -1) { //let thtml = `<a class="sample-box" href="${$imgTab}"><div class="photo-frame">${html}</div></a>`; //let thtml = `<a class="sample-box openVideo" href="#jav_preview"><div class="photo-frame"><img src="${$imgTab}" title=""></div></a>`; //$position.insertAdjacentHTML('afterBegin', thtml); $adtablePostiton.insertAdjacentHTML('beforeBegin',html); let tmpA = document.querySelector('.bigImage'); tmpA.insertAdjacentHTML('beforeBegin',`<a id='playBtnA' href='#jav_preview'><button id='playBtn' sytle="" ></button></a>`); tmpA.classList.add('openVideo'); tmpA.href="#jav_preview"; document.querySelector('#playBtn').setAttribute("style","position: relative;background: rgba(0, 0, 0, .0);border: none;outline: none;height: 2em;width: 2em;font-size: 2em;cursor: pointer;content: '';position: absolute;top: 45%;left: 48%;height: 0;border-style: solid; border-width: 1em 0 1em 2em; border-color: transparent transparent transparent #e52d27; transition: 0.218s ease;"); $('.openVideo').magnificPopup({ type: 'inline', callbacks: { open: function() { $('html').css('margin-right', 0); // Play video on open: let video = document.querySelector('#jav_preview'); video.style.display = 'inline'; video.play(); let mfpContent = document.querySelector('.mfp-content'); mfpContent.style.textAlign='center'; }, close: function() { // Reset video on close: let video = document.querySelector('#jav_preview'); video.style.display = 'inline'; video.pause(); } } }); $('#playBtnA').magnificPopup({ type: 'inline', callbacks: { open: function() { $('html').css('margin-right', 0); // Play video on open: let video = document.querySelector('#jav_preview'); video.style.display = 'inline'; video.play(); let mfpContent = document.querySelector('.mfp-content'); mfpContent.style.textAlign='center'; }, close: function() { // Reset video on close: let video = document.querySelector('#jav_preview'); video.style.display = 'inline'; video.pause(); } } }); }else{ $position.insertAdjacentHTML('afterEnd', html) } //$position.innerHTML=html } addmeta() preview()