您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Greasy Fork is available in English.
自动将所有蓝奏云链接重定向至lanzn.com。自动记住并填写蓝奏云密码。直接下载APK文件。
当前为
// ==UserScript== // @name 蓝奏云重定向+记住密码 // @namespace http://greasyfork.icu/zh-CN/scripts?set=589091 // @version 1.21 // @description 自动将所有蓝奏云链接重定向至lanzn.com。自动记住并填写蓝奏云密码。直接下载APK文件。 // @author 呆呆 // @match https://*lanzou*.com/* // @match https://*lanosso.com/* // @match https://*lanzog.com/* // @match https://*lanpw.com/* // @match https://*lanpv.com/* // @match https://*lanzv.com/* // @match https://*lanzn.com/* // @match https://m-load.lanrar.com/* // @grant GM_registerMenuCommand // @grant GM_setValue // @grant GM_getValue // @grant GM_listValues // @grant GM_deleteValue // @grant GM_notification // ==/UserScript== if (document.getElementById('fix')) { if (typeof(window.via) == "object") window.via.toast('正在下载....'); else if (typeof(window.mbrowser) == "object") window.mbrowser.showToast('正在下载....'); return; } function addElement({ tag, attrs = {}, to = document.body || document.documentElement, }) { const el = document.createElement(tag); Object.assign(el, attrs); to.appendChild(el); return el; } function addStyle(css) { return addElement({ tag: 'style', attrs: { textContent: css, }, to: document.head, }); } var config = { "toast": 0.1, "out": 1 }; function toast(text, time = 3, callback, transition = 0.2) { let isObj = (o) => typeof o == 'object' && typeof o.toString == 'function' && o.toString() === '[object Object]', timeout, toastTransCount = 0; if (typeof text != 'string') text = String(text); if (typeof time != 'number' || time <= 0) time = 3; if (typeof transition != 'number' || transition < 0) transition = 0.2; if (callback && !isObj(callback)) callback = undefined; if (callback) { if (callback.text && typeof callback.text != 'string') callback.text = String(callback.text); if ( callback.color && (typeof callback.color != 'string' || callback.color === '')) delete callback.color; if (callback.onclick && typeof callback.onclick != 'function') callback.onclick = () => null; if (callback.onclose && typeof callback.onclose != 'function') delete callback.onclose; } let toastStyle = addStyle(` #bextToast { all: initial; display: flex; position: fixed; left: 0; right: 0; bottom: 10vh; width: max-content; max-width: 80vw; max-height: 80vh; margin: 0 auto; border-radius: 20px; padding: .5em 1em; font-size: 16px; background-color: rgba(0,0,0,0.5); color: white; z-index: 1000002; opacity: 0%; transition: opacity ${transition}s; } #bextToast > * { display: -webkit-box; height: max-content; margin: auto .25em; width: max-content; max-width: calc(40vw - .5em); max-height: 80vh; overflow: hidden; -webkit-line-clamp: 22; -webkit-box-orient: vertical; text-overflow: ellipsis; overflow-wrap: anywhere; } #bextToastBtn { color: ${callback && callback.color ? callback.color : 'turquoise'} } #bextToast.bextToastShow { opacity: 1; } `), toastDiv = addElement({ tag: 'div', attrs: { id: 'bextToast', }, }), toastShow = () => { toastDiv.classList.toggle('bextToastShow'); toastTransCount++; if (toastTransCount >= 2) { setTimeout(function() { toastDiv.remove(); toastStyle.remove(); if (callback && callback.onclose) callback.onclose.call(this); }, transition * 1000 + 1); } }; addElement({ tag: 'div', attrs: { id: 'bextToastText', innerText: text, }, to: toastDiv, }); if (callback && callback.text) { addElement({ tag: 'div', attrs: { id: 'bextToastBtn', innerText: callback.text, onclick: callback && callback.onclick ? () => { callback.onclick.call(this); clearTimeout(timeout); toastShow(); } : null, }, to: toastDiv, }); } setTimeout(toastShow, 1); timeout = setTimeout(toastShow, (time + transition * 2) * 1000); } function Toast(text) { if (typeof(window.via) == "object") window.via.toast(text); else toast(text); } // 获取当前网页链接 var currentUrl = window.location.href; // 检查当前网址 if (!currentUrl.startsWith('https://www.lanzn.com/')) { // 替换域名 var newUrl = currentUrl.replace(window.location.hostname, 'www.lanzn.com'); Toast("重定向中...."); // 重新访问新链接 window.location.href = newUrl; } // 使用GM_registerMenuCommand添加管理密码的菜单命令 GM_registerMenuCommand('查看密码', function() { // 获取所有存储的键 const allKeys = GM_listValues(); // 存储所有存储的数据 const allStoredData = {}; // 遍历所有键,并获取对应的值 allKeys.forEach(key => { const value = GM_getValue(key); allStoredData[key] = value; }); // 构建展示消息 let message = ''; Object.entries(allStoredData).forEach(([key, value]) => { if (value.title !== undefined) message += `${value.title} (${key}):${value.password}\n•┈┈┈┈┈┈┈┈┈┈┈┈•\n`; }); // 显示消息 alert(message); }); // 使用GM_registerMenuCommand添加管理密码的菜单命令 GM_registerMenuCommand('🔒管理密码', function() { // 获取所有存储的键值对 const allStoredData = {}; const allKeys = GM_listValues(); allKeys.forEach(key => { const value = GM_getValue(key); allStoredData[key] = value; }); // 构建展示消息 let message = ''; Object.entries(allStoredData).forEach(([key, value]) => { if (value.title !== undefined) message += `${value.title} (${key}):${value.password}`; if (typeof(window.mbrowser) == "object") message += '$'; else message += '\n'; }); // 提示用户编辑密码列表 let tip = '换行'; if (typeof(window.mbrowser) == "object") tip = '$'; const editedList = prompt('多条密码请使用\'' + tip + '\'分割', message); if (editedList !== null) { // 清空所有存储的密码 allKeys.forEach(key => { GM_deleteValue(key); }); // 将编辑后的列表转换为标准格式并存储 let editedLines; if (typeof(window.mbrowser) == "object") editedLines = editedList.split('$'); else editedLines = editedList.split('\n'); const linePattern = /\((.*?)\)/; editedLines.forEach(line => { const urlMatch = line.match(linePattern); if (urlMatch) { const title = line.substring(0, urlMatch.index).trim(); const url = urlMatch[1].trim(); const password = line.substring(line.indexOf(':') + 1).trim(); GM_setValue(url, { title, password }); } }); Toast('密码列表已更新!'); } }); // 获取文本框元素 const inputElement = document.getElementById('pwd'); // 获取按钮元素 const subButton = document.getElementById('sub'); const passwddivButton = document.querySelector('.passwddiv-btn'); // 获取存储的值 const storedCredentials = GM_getValue(currentUrl); // 检查是否存在存储的值 if (storedCredentials) { // 如果有存储的数据,将其填充到文本框中 inputElement.value = storedCredentials.password; // 检查是否存在.passwddiv-btn元素 if (passwddivButton) { // 如果存在,点击.passwddiv-btn passwddivButton.click(); } else { // 否则点击sub subButton.click(); } } const divnoneButton = document.getElementById('divnone'); if (divnoneButton && !currentUrl.includes("/tp/")) { const modifiedUrl = currentUrl.replace("com/", "com/tp/"); window.location.href = modifiedUrl; } const submitButton = document.getElementById('submit'); if (submitButton && inputElement) { submitButton.click(); if (storedCredentials) { inputElement.value = storedCredentials.password; } if (passwddivButton) { passwddivButton.click(); } else { subButton.click(); } } // 监听文本框的输入事件 inputElement.addEventListener('input', function() { // 获取当前网页标题 const pageTitle = document.title; const mdText = document.getElementById('.md'); if (mdText) pageTitle = mdText.textContent; if (pageTitle === '文件') Toast('\"🔒管理密码\"可更改文件名称'); // 将标题和密码存储为对象 const credentials = { title: pageTitle, password: inputElement.value }; // 将对象存储在GM存储中 GM_setValue(currentUrl, credentials); });