Считать значение из chrome автозаполнения с расширением javascript chrome - PullRequest
0 голосов
/ 13 марта 2020

Что я пытаюсь сделать:

Разработка расширения chrome, которое отправляет форму (через событие нажатия кнопки) на веб-сайте. Поля ввода формы заполняются chrome автозаполнением. Для этого используйте декларативную js -инъекцию с контент-скриптами. Форма выглядит следующим образом:

           <form action="...." method="post">
                <table style="margin-top:4px; margin-bottom:4px">
                    <tr>
                        <td width="40%">
                            <label for="username">Login:</label>
                        </td>
                        <td>
                            <input name="i_username" type="text" id="username" autocapitalize="off" value="" autofocus/>
                        </td>
                    </tr>
                    <tr>
                        <td>
                            <label for="password">Passwort:</label>
                        </td>
                        <td>
                            <input name="i_password" type="password" id="password"/>
                        </td>
                    </tr>

                    <tr>

                        <td>
                            <button type="submit" name="proceed" value="Login">Login</button>
                        </td>
                    </tr>
                </table>
            </form>

Что происходит:

Страница загружена. Значения заполняются chrome автозаполнением и видны человеческому глазу. Однако, когда я пытаюсь прочитать входные значения с javascript, они пусты. (Таким образом, отправка формы с помощью кнопки приводит к ошибке, поскольку значения «пустые».) Как только реальный пользователь взаимодействует со страницей, значения становятся доступны в моем javascript.

I провел множество исследований по этой теме c, в том числе:

Нет этих тем пришел к окончательному выводу.

Я испробовал ряд решений для имитации «реального взаимодействия с пользователем», а также других обходных путей. Я пытался смоделировать реальный пользовательский ввод с помощью js событий клавиатуры или мыши. Я также пытался инициировать такие события, как .blur (), .focus () ....

Можно ли каким-либо образом прочитать значения автозаполнения без какого-либо взаимодействия с пользователем?

На самом деле было бы достаточно получить значения, которые заполняются chrome автозаполнением. Например, было бы здорово прочитать их прямо из chrome хранилища паролей (что, я знаю, невозможно).

Спасибо, OliDev

1 Ответ

0 голосов
/ 14 марта 2020

Я собираюсь ответить на свой собственный вопрос:

Для каждого события есть свойство «isTrusted»: «Свойство isTrusted только для чтения интерфейса Event является логическим значением, которое имеет значение true, когда событие было генерируется действием пользователя и false, когда событие было создано или изменено сценарием или отправлено через EventTarget.dispatchEvent (). " (из https://developer.mozilla.org/en-US/docs/Web/API/Event/isTrusted).

Таким образом, невозможно симулировать «реальный пользовательский ввод» с помощью программ c javascript-событий. Однако значения автозаполнения с помощью chrome доступны только при наличии события isTrusted = true!

Примечание: хотя событие window.scroll () имеет значение isTrusted = true, оно не делает значения автозаполнения читаемым.

...