Установить значение текстового поля с помощью JavaScript - PullRequest
0 голосов
/ 16 января 2019

Я создаю расширение Safari для автозаполнения электронной почты.Мне удалось заставить это работать, но на некоторых сайтах текстовое поле, кажется, заполнено значением, но когда веб-сайт пытается получить это значение, он ничего не получает.

Для пояснения, мой код работает, например:Facebook, Github, Stackoverflow, ...Но это не работает, например, на developer.apple.com, www.back4app.com, Microsoft, ...

Я пытался увидеть, что делает автозаполнение цепочки для ключей в Safari, и это показывает, что встретилисьэлектронная почта фактически заполняется в теге HTML.Это не происходит с моим кодом.Но электронная почта всегда заполняется в текстовом поле, которое вы видите на веб-странице.

function handleMessage(event) {
    var arguments = event.message;    

    var emailStr = arguments["Email"];

    var nameInputs = document.getElementsByTagName('input');

    for (var i = 0; i < nameInputs.length; i++) {
        var theFieldName = nameInputs[i].name.toLowerCase();
        var theFieldType = nameInputs[i].type.toLowerCase();

        if (theFieldName.indexOf("email") !== -1) {
            if (!(emailStr === undefined)) {
                nameInputs[i].value = emailStr;
                filledInEmail = 1;
            }
        }
        else if (theFieldType.indexOf("email") !== -1) {
            if (!(emailStr === undefined)) {
                nameInputs[i].value = emailStr;
                filledInEmail = 1;
            }
        }
    }
}

1 Ответ

0 голосов
/ 16 января 2019

Я предполагаю, что эти сайты прослушивают событие изменения ввода. Попробуйте это:

function handleMessage(event) {
    var arguments = event.message;    

    var emailStr = arguments["Email"];

    var nameInputs = document.getElementsByTagName('input');

    for (var i = 0; i < nameInputs.length; i++) {
        var theFieldName = nameInputs[i].name.toLowerCase();
        var theFieldType = nameInputs[i].type.toLowerCase();

        if (theFieldName.indexOf("email") !== -1) {
            if (!(emailStr === undefined)) {
                nameInputs[i].value = emailStr;
                nameInputs[i].dispatchEvent(new Event('change'));//trigger change event
                filledInEmail = 1;
            }
        }
        else if (theFieldType.indexOf("email") !== -1) {
            if (!(emailStr === undefined)) {
                nameInputs[i].value = emailStr;
                nameInputs[i].dispatchEvent(new Event('change'));//trigger change event
                filledInEmail = 1;
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...