Возьмите строку из локального файла, вставьте во входные данные на сайте - PullRequest
0 голосов
/ 07 января 2019

Я пытаюсь сделать расширение для Chrome, чтобы автоматизировать / облегчить выполнение нескольких задач. Одна вещь, которую мы регулярно должны делать, - это входить в модемы клиентов с посеянным паролем Arris. Я смог загрузить текстовый файл, содержащий пароль дня, отсортированный по дате, и получить пароль, соответствующий текущей дате, но сейчас нам нужно вручную открыть сетевой диск, найти файл, найти текущая дата (каждый потд за год генерируется и разбивается на 4 файла по 3-месячным группам), а затем копируется и вставляется. Не является массовым неудобством, но я бы хотел вставить его в поле пароля автоматически, если это возможно.

manifest.json

{
"name": "Web Kit",
"version": "0.1",
"description": "Modifications for web-based tools",
"permissions": ["storage", "activeTab"],
"content_scripts": [
    {
        "matches": ["http://example.com"],
        "css": ["tickets.css"],
        "js": ["tickets.js"]
    },
    {
        "matches": ["https://example.com"],
        "js": ["iglass.js"]
    },
    {
        "matches": ["https://example.com/*"],
        "css": ["iglass.css"]
    },
    {
        "matches": ["<all_urls>"],
        "js": ["gateway.js"]
    },
    {
        "matches": ["file:///*"],
        "js": ["potd.js"]
    }
],
"web_accessible_resources": [
    "file:///home/shea/potd.txt"
],
"manifest_version": 2
}

gateway.js

Этот сценарий проверяет, что домен соответствует диапазону частных IP-адресов класса A, и соответственно заполняет некоторую информацию.

var user = "technician";
var potd;
var site = location.hostname;
var regex = new RegExp("(10)(\.([2]([0-5][0-5]|[01234][6-9])|[1][0-9][0-9]|[1-9][0-9]|[0-9])){3}");
var match = site.match(regex);
if (match != null) {
    document.getElementById("username").value = user;
    document.getElementById("password").value = potd;
}
else {
    console.log("Not a gateway login.")
}

potd.js

Этот файл анализирует файл potd.txt на строку, в которой первые 8 символов соответствуют текущей дате, а затем получает последние 10 для пароля дня.

// We can load all the POTD files as an array and check them one at a time
// if (location == file) can be nested in a for loop where file is then file[i]

file = "file:///home/shea/potd.txt";

var date = new Date();
var month = (date.getMonth() + 1).toString();
if (month.length < 2) {
    month = "0" + month;
}
var day = date.getDate().toString();
if (day.length < 2) {
    day = "0" + day;
}
var year = (date.getFullYear().toString()).slice(-2);
var dateStr = month + "/" + day + "/" + year;
if (location == file) {
    var content = new XMLSerializer().serializeToString(document);
    var lines = content.split('\n');
    for (var i = 2; i < 10; i++) {
        var potd = lines[i].substr(10);
        if (lines[i].substr(0, 8) == dateStr) {
            alert(potd);
            if (!potd) {
                console.log("Something went wrong, no POTD stored...");
            }
            else {
                chrome.storage.sync.set({'date': dateStr}, function() {
                    console.log('Setting saved');
                });
                chrome.storage.sync.set({'potd': potd}, function() {
                    console.log('Setting 2 saved');
                });
            }
        }
    }
}
else {
    console.log("Not the potd file");
}

Вы можете видеть, где я пытался использовать chrome.storage.sync, но, честно говоря, я не до конца понимаю и не могу заставить его работать.

TL; DR Я хочу взять строку из текстового файла potd.txt и вставить ее в текстовое поле в http://10.*.*.*

У меня такое ощущение, что это может не сработать, потому что эти файлы не в одном домене, но я подумал, что если кто-то может мне помочь, ТАК может.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...