您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adiciona um botão que enquanto pressionado, mostra a senha digitada.
// ==UserScript== // @name Mostrar Senha Dealernet // @namespace http://tampermonkey.net/ // @version 1.0 // @description Adiciona um botão que enquanto pressionado, mostra a senha digitada. // @match http*://*.dealernetworkflow.com.br/LoginAux.aspx* // @grant none // @license MIT // ==/UserScript== (function() { 'use strict'; // Função para adicionar o botão de alternância function adicionarAlternadorSenha() { // Encontra o campo de senha específico let campoSenha = document.getElementById('vUSUARIOSENHA_SENHA'); // Se o campo não existir nesta página, saia if (!campoSenha) return; // Criar o ícone do olho usando SVG const iconeOlho = document.createElement('span'); iconeOlho.innerHTML = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" width="18" height="18"> <path d="M288 32c-80.8 0-145.5 36.8-192.6 80.6C48.6 156 17.3 208 2.5 243.7c-3.3 7.9-3.3 16.7 0 24.6C17.3 304 48.6 356 95.4 399.4C142.5 443.2 207.2 480 288 480s145.5-36.8 192.6-80.6c46.8-43.5 78.1-95.4 93-131.1c3.3-7.9 3.3-16.7 0-24.6c-14.9-35.7-46.2-87.7-93-131.1C433.5 68.8 368.8 32 288 32zM144 256a144 144 0 1 1 288 0 144 144 0 1 1 -288 0zm144-64c0 35.3-28.7 64-64 64c-7.1 0-13.9-1.2-20.3-3.3c-5.5-1.8-11.9 1.6-11.7 7.4c.3 6.9 1.3 13.8 3.2 20.7c13.7 51.2 66.4 81.6 117.6 67.9s81.6-66.4 67.9-117.6c-11.1-41.5-47.8-69.4-88.6-71.1c-5.8-.2-9.2 6.1-7.4 11.7c2.1 6.4 3.3 13.2 3.3 20.3z"/> </svg>`; iconeOlho.style.cssText = ` position: absolute; right: 10px; top: 52%; transform: translateY(-50%); cursor: pointer; user-select: none; z-index: 1000; display: flex; align-items: center; `; // Obter o elemento TD pai const tdPai = campoSenha.parentElement; // Definir o TD para posicionamento relativo tdPai.style.position = 'relative'; // Adicionar o ícone do olho ao TD tdPai.appendChild(iconeOlho); // Armazenar estado original let tipoOriginal = campoSenha.type; let classesOriginais = campoSenha.className; // Rastrear estado de visibilidade let estaVisivel = false; // Função para mostrar a senha function mostrarSenha() { if (estaVisivel) return; estaVisivel = true; // Armazenar valor atual const valorAtual = campoSenha.value; // Armazenar propriedades do campo const propriedadesCampo = { id: campoSenha.id, nome: campoSenha.name, tamanho: campoSenha.size, comprimentoMaximo: campoSenha.maxLength, estilo: campoSenha.style.cssText, aoFocar: campoSenha.onfocus, aoDesfocar: campoSenha.onblur, aoMudar: campoSenha.onchange }; // Remover campo antigo campoSenha.remove(); // Criar novo campo const novoCampo = document.createElement('input'); novoCampo.type = 'text'; novoCampo.id = propriedadesCampo.id; novoCampo.name = propriedadesCampo.nome; novoCampo.value = valorAtual; novoCampo.size = propriedadesCampo.tamanho; novoCampo.maxLength = propriedadesCampo.comprimentoMaximo; novoCampo.className = classesOriginais.replace('InputPassword', 'InputText'); novoCampo.style.cssText = propriedadesCampo.estilo; novoCampo.onfocus = propriedadesCampo.aoFocar; novoCampo.onblur = propriedadesCampo.aoDesfocar; novoCampo.onchange = propriedadesCampo.aoMudar; // Inserir novo campo tdPai.insertBefore(novoCampo, iconeOlho); // Atualizar referência campoSenha = novoCampo; // Estilizar o ícone do olho iconeOlho.style.opacity = '0.7'; iconeOlho.title = 'Solte para esconder a senha'; // Reaplicar atributo autocomplete="off" if (typeof gx !== 'undefined' && gx.dom) { gx.dom.setAttribute(campoSenha.id, "autocomplete", "off"); } } // Função para esconder a senha function esconderSenha() { if (!estaVisivel) return; estaVisivel = false; // Armazenar valor atual const valorAtual = campoSenha.value; // Armazenar propriedades do campo const propriedadesCampo = { id: campoSenha.id, nome: campoSenha.name, tamanho: campoSenha.size, comprimentoMaximo: campoSenha.maxLength, estilo: campoSenha.style.cssText, aoFocar: campoSenha.onfocus, aoDesfocar: campoSenha.onblur, aoMudar: campoSenha.onchange }; // Remover campo antigo campoSenha.remove(); // Criar novo campo const novoCampo = document.createElement('input'); novoCampo.type = 'password'; novoCampo.id = propriedadesCampo.id; novoCampo.name = propriedadesCampo.nome; novoCampo.value = valorAtual; novoCampo.size = propriedadesCampo.tamanho; novoCampo.maxLength = propriedadesCampo.comprimentoMaximo; novoCampo.className = classesOriginais; novoCampo.style.cssText = propriedadesCampo.estilo; novoCampo.onfocus = propriedadesCampo.aoFocar; novoCampo.onblur = propriedadesCampo.aoDesfocar; novoCampo.onchange = propriedadesCampo.aoMudar; // Inserir novo campo tdPai.insertBefore(novoCampo, iconeOlho); // Atualizar referência campoSenha = novoCampo; // Estilizar o ícone do olho iconeOlho.style.opacity = '1'; iconeOlho.title = 'Mantenha pressionado para ver a senha'; // Reaplicar atributo autocomplete="off" if (typeof gx !== 'undefined' && gx.dom) { gx.dom.setAttribute(campoSenha.id, "autocomplete", "off"); } } // Adicionar event listeners de mousedown e mouseup ao ícone do olho iconeOlho.addEventListener('mousedown', function(e) { e.preventDefault(); // Prevenir seleção de texto mostrarSenha(); }); iconeOlho.addEventListener('mouseup', esconderSenha); iconeOlho.addEventListener('mouseleave', esconderSenha); // Para dispositivos touch iconeOlho.addEventListener('touchstart', function(e) { e.preventDefault(); mostrarSenha(); }); iconeOlho.addEventListener('touchend', esconderSenha); iconeOlho.addEventListener('touchcancel', esconderSenha); // Definir título inicial iconeOlho.title = 'Mantenha pressionado para ver a senha'; } // Função para verificar e adicionar o alternador repetidamente function verificarEAdicionarAlternador() { const campoSenha = document.getElementById('vUSUARIOSENHA_SENHA'); if (campoSenha) { // Verificar se já adicionamos o ícone do olho const tdPai = campoSenha.parentElement; if (tdPai && !tdPai.querySelector('span[title="Mantenha pressionado para ver a senha"]') && !tdPai.querySelector('span[title="Solte para esconder a senha"]')) { adicionarAlternadorSenha(); } } } // Executar o script após a página ser carregada window.addEventListener('load', verificarEAdicionarAlternador); // Também tentar executá-lo quando o DOM estiver pronto document.addEventListener('DOMContentLoaded', verificarEAdicionarAlternador); // Para páginas que carregam conteúdo dinamicamente, verificar periodicamente setInterval(verificarEAdicionarAlternador, 1000); })();