记录账号和密码

记录网站密码信息并自动填充

目前为 2024-07-06 提交的版本。查看 最新版本

// ==UserScript==
// @name         记录账号和密码
// @namespace    https://bbs.tampermonkey.net.cn/
// @version      0.3.3
// @description  记录网站密码信息并自动填充
// @author       niweizhuan
// @match        *://*/*
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        GM_deleteValue
// @grant        GM_listValues
// @grant        GM_addStyle
// @grant        unsafeWindow
// @license      MIT
// ==/UserScript==

(function() {
    'use strict';
    //获取当前域
    function getCurrentDomain() {
        return window.location.hostname;
    }
    //显示界面
    function createDisplayArea() {
        //主容器
        var displayDiv = document.createElement("div");
        displayDiv.setAttribute("class", "jizhuDisplayArea");
        displayDiv.style.display = "none";
        displayDiv.style.position = "fixed";
        displayDiv.style.bottom = "70px";
        displayDiv.style.right = "20px";
        displayDiv.style.background = "skyblue";
        displayDiv.style.padding = "10px";
        displayDiv.style.border = "1px solid #ccc";
        displayDiv.style.zIndex = "2147483647";
        displayDiv.style.maxWidth = "300px";

        //关闭按钮
        var closeButton = document.createElement("button");
        closeButton.textContent = "关闭";
        closeButton.style.cursor = "pointer";
        closeButton.style.backgroundColor = "transparent";
        closeButton.style.border = "none";
        closeButton.style.fontSize = "14px";
        closeButton.style.color = "#333";
        closeButton.style.marginLeft = "10px";
        closeButton.onclick = function() {
            displayDiv.style.display = "none";
        };
        closeButton.ontouchend = closeButton.onclick;
        displayDiv.appendChild(closeButton);

        //域标签和凭证容器
        var domainLabel = document.createElement("p");
        domainLabel.setAttribute("class", "domainLabel");
        displayDiv.appendChild(domainLabel);

        var credentialsContainer = document.createElement("div");
        credentialsContainer.setAttribute("class", "credentialsContainer");
        displayDiv.appendChild(credentialsContainer);

        //编辑按钮
        var editButton = document.createElement("button");
        editButton.textContent = "编辑";
        editButton.style.cursor = "pointer";
        editButton.style.backgroundColor = "transparent";
        editButton.style.border = "none";
        editButton.style.fontSize = "14px";
        editButton.style.color = "#333";
        editButton.style.marginLeft = "10px";
        editButton.onclick = function() {
            displayDiv.style.display = "none";
            showEditPage();
        };
        editButton.ontouchend = editButton.onclick;
        displayDiv.appendChild(editButton);

        document.body.appendChild(displayDiv);
    }
    //编辑界面
    function showEditPage() {
        //初始化
        var currentDomain = getCurrentDomain();
        var storedData = GM_getValue(currentDomain);
        var existingEditDiv = document.querySelector(".jizhuEditArea");
        if (existingEditDiv) {
            existingEditDiv.remove();
        }
        //编辑框
        var editDiv = document.createElement("div");
        editDiv.setAttribute("class", "jizhuEditArea");
        editDiv.style.position = "fixed";
        editDiv.style.top = "50%";
        editDiv.style.left = "50%";
        editDiv.style.transform = "translate(-50%, -50%)";
        editDiv.style.background = "#fff";
        editDiv.style.padding = "20px";
        editDiv.style.border = "1px solid #ccc";
        editDiv.style.zIndex = "2147483647";
        editDiv.style.display = "block";
        //显示域名
        var domainLabel = document.createElement("p");
        domainLabel.textContent = "此网站: " + currentDomain;
        editDiv.appendChild(domainLabel);
        //输入账号
        var usernameInput = document.createElement("input");
        usernameInput.setAttribute("type", "text");
        usernameInput.setAttribute("placeholder", "请输入账号");
        usernameInput.value = storedData ? JSON.parse(storedData).username : "";
        editDiv.appendChild(usernameInput);
        //输入密码
        var passwordInput = document.createElement("input");
        passwordInput.setAttribute("type", "password");
        passwordInput.setAttribute("placeholder", "请输入密码");
        passwordInput.value = storedData ? JSON.parse(storedData).password : "";
        editDiv.appendChild(passwordInput);
        //保存
        var saveButton = document.createElement("button");
        saveButton.textContent = "保存";
        saveButton.style.cursor = "pointer";
        saveButton.style.backgroundColor = "#007bff";
        saveButton.style.border = "none";
        saveButton.style.color = "#fff";
        saveButton.style.padding = "10px 15px";
        saveButton.style.fontSize = "14px";
        saveButton.onclick = function() {
            var newUsername = usernameInput.value.trim();
            var newPassword = passwordInput.value.trim();
            if (!newUsername && !newPassword) {
                GM_deleteValue(currentDomain);
            } else {
                GM_setValue(currentDomain, JSON.stringify({ username: newUsername, password: newPassword }));
            }
            editDiv.style.display = "none";
            fillCredentials(newUsername, newPassword);
        };
        saveButton.ontouchend = saveButton.onclick;
        editDiv.appendChild(saveButton);
        //关闭
        var closeButton = document.createElement("button");
        closeButton.textContent = "关闭";
        closeButton.style.cursor = "pointer";
        closeButton.style.backgroundColor = "transparent";
        closeButton.style.border = "none";
        closeButton.style.fontSize = "14px";
        closeButton.style.color = "#333";
        closeButton.style.marginLeft = "10px";
        closeButton.onclick = function() {
            editDiv.style.display = "none";
        };
        closeButton.ontouchend = closeButton.onclick;
        editDiv.appendChild(closeButton);

        document.body.appendChild(editDiv);
    }
    //切换显示
    function toggleDisplay() {
        var displayDiv = document.querySelector(".jizhuDisplayArea");
        var currentDomain = getCurrentDomain();//当前域名
        var storedData = GM_getValue(currentDomain);//获取数据
        //切换状态
        if (displayDiv.style.display === "block") {
            displayDiv.style.display = "none";
        } else {
            displayDiv.style.display = "block";
            displayDiv.querySelector(".domainLabel").textContent = "当前网站: " + currentDomain;
            //是否有存储的数据
            if (storedData) {
                var parsedData = JSON.parse(storedData);
                displayDiv.querySelector(".credentialsContainer").innerHTML = "<p>账号: " + parsedData.username + "</p><p>密码: " + parsedData.password + "</p>";
                fillCredentials(parsedData.username, parsedData.password);
            } else {
                displayDiv.querySelector(".credentialsContainer").textContent = "暂无存储的账号和密码";
            }
        }
    }
    //自动填充密码
    function fillCredentials(username, password) {
        var usernameInput = document.querySelector('input[type="text"], input[name*="user"], input[name*="email"]');
        var passwordInput = document.querySelector('input[type="password"]');

        if (usernameInput && passwordInput) {
            usernameInput.value = username;
            passwordInput.value = password;
        }
    }
    createDisplayArea();
    //按钮:显示账号密码
    var displayButton = document.createElement("button");
    displayButton.textContent = "显示账号和密码";
    displayButton.style.position = "fixed";
    displayButton.style.bottom = "20px";
    displayButton.style.right = "20px";
    displayButton.style.zIndex = "2147483647";
    displayButton.style.cursor = "pointer";
    displayButton.onclick = function(event) {
        toggleDisplay();
        event.stopPropagation();
    };
    //触摸支持
    displayButton.ontouchend = function(event) {
        toggleDisplay();
        event.stopPropagation();
    };
    //填充到页面
    document.body.appendChild(displayButton);
    //启动自动填充密码
    window.addEventListener('load', function() {
        var currentDomain = getCurrentDomain();
        var storedData = GM_getValue(currentDomain);

        if (storedData) {
            var parsedData = JSON.parse(storedData);
            fillCredentials(parsedData.username, parsedData.password);
        }
    });
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址