Я пытаюсь сделать расширение Chrome, чтобы автоматизировать / упростить несколько задач на работе. Одна вещь, которую мы должны регулярно делать, - это входить в клиентские модемы, используя засеянный пароль дня Arris. Мне удалось загрузить текстовый файл, содержащий пароль дня, отсортированный по дате, и получить пароль, соответствующий текущей дате, но прямо сейчас нам нужно вручную открыть сетевой диск, найти файл, найти текущую дату (создается каждый potd за год и разбивается между 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.info("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.info("Something went wrong, no POTD stored...");
}
else {
chrome.storage.sync.set({'date': dateStr}, function() {
console.info('Setting saved');
});
chrome.storage.sync.set({'potd': potd}, function() {
console.info('Setting 2 saved');
});
}
}
}
}
else {
console.info("Not the potd file");
}
Вы можете видеть, где я пытался использовать chrome.storage.sync, но, честно говоря, я не совсем понимаю это и, похоже, не могу заставить его работать.
TL; DR Я хочу взять строку из текстового файла potd.txt и вставить ее в текстовое поле в http: //10.*.*.*
У меня такое чувство, что это может не сработать, потому что эти файлы не находятся в одном домене, но я подумал, что если кто-нибудь может мне помочь, ТАК может.
Спасибо за ответ! Похоже, мне придется упаковать текстовые файлы с расширением. Я надеялся избежать этого на случай, если расширение будет распространено или что-то в этом роде.
Вы можете получить доступ к содержимому файла через XHR / fetch по его URL-адресу file: // в фоновом сценарии (не в сценарии содержимого), если 1) вы добавляете URL-адрес в «разрешения», 2) ваши пользователи хотят разрешить доступ к файлу в сведения об установленном расширении на странице chrome: // extensions.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


В инструментах разработчика браузера есть отладчик, поэтому вы можете установить точку останова, и когда она сработает, вы можете проверить переменную, выполняя код построчно. Не видя файла potd.txt или не пробуя расширение, я не уверен, что мы можем помочь, поэтому вам нужно отладить его и определить, где именно он не работает. Кстати, ваш web_accessible_resources ничего не делает, так как он может перечислять только локальные ресурсы вашего расширения.