使用javascript

时间:2019-01-16 17:03:19

标签: javascript html safari

我正在创建一个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 :(得分:0)

我猜那些站点正在监听输入更改事件。试试这个:

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;
            }
        }
    }
}