, не вводите жесткую информацию для входа в скрипт.
я проверю<input type="password"/>
из моего сценария Tampermonkey и наблюдать изменения, используяchange
обработчик для поля пароля, которое заполняется функцией диспетчера паролей в Chrome, значение остается пустым, пока я физически не выполню настоящий щелчок на странице. В своем скрипте я пробовал щелкать по странице, но Chrome знает, что это не настоящий щелчок. Когда я физически нажимаю на странице,change
событие неожиданно срабатывает, поле пароля получает значение, и затем мой скрипт реагирует правильно (из-за наличияchange
мероприятие). Но я написал этот сценарий, чтобы избежать необходимости взаимодействовать со страницей в первую очередь, так что это противоречит смыслу моего сценария.
Есть ли способ заставить TamperMonkey пометить страницу, как если бы пользователь взаимодействовал с ней (например, некоторые гипотетическиеGM_setUserTouched()
или жеGM_autoFillPasswords()
API), так что функция Менеджер паролей фактически заполняет<input type="password"/>
без необходимости, чтобы я нажал на странице?
В Chrome это поведение описано в# 352527 комментарий 15, где поведение репортера неожиданно а также# 398805 где есть случай, когда Chrome не может реализовать поведение, которое я не хочу, Считается, что когда автозаполнение и встроенный в Chrome менеджер паролей заполняют форму, символы пароля отображаются пользователю в поле пароля, но DOMHTMLInputElement.value
установлен в""
, Когда пользователь взаимодействует со страницей, например, нажимая на нее или нажимая клавишу, Chrome изменяетHTMLInputElement.value
содержать пароль иchange
событие запускается в элементе. Причиной этого является «соображения безопасности» (например, если скрипт веб-сайта читал из элемента пароля, у него была бы возможность сделать это только в том случае, если пользователь просматривал страницу… так что всплывающие окна или невидимые фреймы не сможет сделать это или что-то?Я не уверен, от чего это вас защищает: когда пользователь взаимодействует со страницей, все сценарии в любом случае будут иметь доступ к паролю. И если плохие сценарии обслуживаются из того же происхождения, что и<input type="password"/>
У самого сайта есть недостаток безопасности, а не у Chrome…).
Greasemonkey исторически имеетвспомогательные API и@grant
Система, позволяющая usercript работать с такими проблемами. Редактировать: при создании репрограммы (ниже) я обнаружил, что Firefox делает пароль автозаполнения доступным для DOM, не дожидаясь, пока пользователь будет взаимодействовать с окном. Таким образом, Greasemonkey не нуженGM_forceAutofill()
API, потому что Firefox не демонстрирует эту причуду Chrome. В результате Tampermonkey не имеет такого API.
Поскольку люди не верят мне, когда я описываю поведение Chrome, я подготовил репродукцию. Требуется некоторая работа, чтобы привести Chrome в состояние, когда он еще не думал, что пользователь взаимодействовал со страницей, но вы должны увидеть то, что я вижу, используя эти шаги:
Откройте Chrome. Я использую Chrome 61.0.3163.91 64-разрядный на Windows 10.Перейдите кhttps://fiddle.jshell.net/xqfynp3e/22/show/light/Введите поддельное имя пользователя и пароль и нажмите ввод или нажмите кнопку. Chrome предложит вам сохранить пароль.Сохраните пароль.Откройте инструменты разработчика.Введите это в Консоль (чтобы перейти на страницу без случайного взаимодействия с ней):window.location.href = 'https://fiddle.jshell.net/xqfynp3e/22/show/light/?1'
Бегатьdocument.querySelector('input[type=password]').value
в консоли.Соблюдайте этопароль формыпоявляется быть заполненным визуально и все же читая элемент DOM в консоли, дает""
.Нажмите в документе.Бегатьdocument.querySelector('input[type=password]').value
снова в консоли.Соблюдайте этопароль формы не изменил внешний вид, но чтение элемента DOM в консоли позволяет получить поддельный пароль, который вы сохранили.Повторяю мой вопрос: как я могу заставить Tampermonkey выполнить шаг «Кликни в документе»? Как сообщить автозаполнителю паролей в Chrome, что я взаимодействовал со страницей без физического взаимодействия со страницей?
РЕДАКТИРОВАТЬ: я нашел альтернативный способ безопасного хранения паролей в Chrome и доступа к ним через пользовательские скрипты с помощью автоматической поддержки посредничества веб-API Credentials:https://imgur.com/a/ts2W1