您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
B站(bilibili)大会员共享
- // ==UserScript==
- // @name Custom bilishare
- // @namespace https://github.com/invobzvr
- // @version 0.4
- // @description B站(bilibili)大会员共享
- // @author invobzvr
- // @match *://www.bilibili.com/bangumi/play/*
- // @grant unsafeWindow
- // @grant GM_deleteValue
- // @grant GM_getValue
- // @grant GM_setValue
- // @license GPL-3.0
- // @homepageURL https://github.com/invobzvr/invotoys.js/tree/main/bilishare
- // @supportURL https://github.com/invobzvr/invotoys.js/issues
- // ==/UserScript==
- (function () {
- const ORI_XHRO = XMLHttpRequest.prototype.open;
- XMLHttpRequest.prototype.open = function () {
- let url = arguments[1],
- idx = url.indexOf('api.bilibili.com/pgc/player/web/playurl');
- if (idx !== -1 && idx < 9 && access_key) {
- url.startsWith('//') && (url = url.replace('//', 'https://'));
- url = new URL(url);
- url.searchParams.append('access_key', access_key);
- arguments[1] = url;
- this.addEventListener('readystatechange', () => {
- if (this.readyState !== 4) {
- return;
- }
- let ret = JSON.parse(this.responseText);
- if (ret.code === -10403) {
- GM_deleteValue('access_key');
- alert('"access_key" may have expired');
- }
- });
- };
- return ORI_XHRO.apply(this, arguments);
- }
- function proxyIV() {
- let userState;
- return new Promise(resolve => {
- let iid = setInterval(() => {
- if (typeof __INITIAL_STATE__.userState.vipInfo.isVip !== 'undefined') {
- clearInterval(iid);
- userState = Object.assign({}, __INITIAL_STATE__.userState);
- Object.defineProperty(userState.vipInfo, 'isVip', { value: true });
- Object.defineProperty(__INITIAL_STATE__, 'userState', { value: userState });
- resolve();
- }
- }, 100);
- });
- }
- async function init() {
- await proxyIV();
- let ep_id = __INITIAL_STATE__.epInfo.id;
- bangumiCallNext(`${ep_id}.`);
- let iid = setInterval(() => (location.pathname.endsWith('.') && (clearInterval(iid), bangumiCallNext(ep_id))), 100);
- }
- let access_key = GM_getValue('access_key');
- access_key && init();
- addEventListener('contextmenu', evt => {
- if (!evt.target.classList.contains('btn-pay')) {
- return;
- }
- evt.preventDefault();
- let val = prompt('Input "access_key":', access_key);
- if (!val) {
- return;
- } else if (val === 'delete') {
- GM_deleteValue('access_key');
- console.log('[access_key] deleted');
- } else if (val.length === 32) {
- GM_setValue('access_key', val);
- access_key = val;
- init();
- console.log('[access_key] setted');
- } else {
- alert('Invalid "access_key"');
- }
- });
- Object.defineProperty(unsafeWindow, 'access_key', {
- get: () => access_key,
- set: val => {
- if (val) {
- GM_setValue('access_key', val);
- let lak = !access_key;
- access_key = val;
- lak && init();
- console.log('[access_key] setted');
- } else {
- GM_deleteValue('access_key');
- console.log('[access_key] deleted');
- }
- }
- });
- })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址