记录网站密码信息并自动填充
当前为
// ==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);
}
});
})();