(function() { function init() { if (typeof QWebChannel === 'undefined' || typeof qt === 'undefined' || !qt.webChannelTransport) { setTimeout(init, 100); return; } new QWebChannel(qt.webChannelTransport, function(channel) { window.passwordHelper = channel.objects.passwordHelper; function captureLogin() { var passwords = document.querySelectorAll('input[type="password"]'); passwords.forEach(function(pass) { var form = pass.form; if (form && !form.dataset.passwordHooked) { form.dataset.passwordHooked = "true"; var handler = function() { var user = form.querySelector('input[type="text"], input[type="email"], input:not([type])'); if (user && user.value && pass.value) { passwordHelper.saveRequest(window.location.hostname, user.value, pass.value); } }; form.addEventListener('submit', handler); var buttons = form.querySelectorAll('button, input[type="submit"], input[type="button"]'); buttons.forEach(function(btn) { btn.addEventListener('click', handler); }); } }); } var observer = new MutationObserver(function(mutations) { captureLogin(); }); observer.observe(document.body, { childList: true, subtree: true }); captureLogin(); }); } init(); })();