, не вводите жесткую информацию для входа в скрипт.

я проверю<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

Ответы на вопрос(1)

Ваш ответ на вопрос