My-extension/options.js

114 lines
3.9 KiB
JavaScript

const browserAPI = typeof browser !== 'undefined' ? browser : chrome;
function saveOptions(event) {
event.preventDefault();
const serverUrl = document.querySelector("#server-url").value;
const password = document.querySelector("#password").value;
if (serverUrl.trim() === "" || password.trim() === "") {
alert("URL сервера и пароль не могут быть пустыми!");
return;
}
if (typeof browser !== 'undefined') {
browserAPI.storage.sync.set({ serverUrl, password })
.then(() => {
showStatus("Настройки сохранены!");
})
.catch((error) => {
console.error("Ошибка сохранения настроек:", error);
showStatus("Ошибка сохранения!", true);
});
} else {
browserAPI.storage.sync.set({ serverUrl, password }, () => {
if (chrome.runtime.lastError) {
console.error("Ошибка сохранения настроек:", chrome.runtime.lastError);
showStatus("Ошибка сохранения!", true);
} else {
showStatus("Настройки сохранены!");
}
});
}
}
function restoreOptions() {
if (typeof browser !== 'undefined') {
browserAPI.storage.sync.get(["serverUrl", "password"])
.then((result) => {
updateFormFields(result);
})
.catch((error) => {
console.error("Ошибка загрузки настроек:", error);
updateFormFields({});
});
} else {
browserAPI.storage.sync.get(["serverUrl", "password"], (result) => {
if (chrome.runtime.lastError) {
console.error("Ошибка загрузки настроек:", chrome.runtime.lastError);
updateFormFields({});
} else {
updateFormFields(result);
}
checkClientIdFromURL();
});
}
}
function updateFormFields(result) {
document.querySelector("#server-url").value = result.serverUrl || "http://localhost:5000/submit";
document.querySelector("#password").value = result.password || "";
}
function showStatus(message, isError = false) {
const status = document.querySelector("#status");
status.textContent = message;
status.style.color = isError ? "red" : "green";
setTimeout(() => {
status.textContent = "";
status.style.color = "";
}, 2000);
}
function getQueryParams() {
const params = new URLSearchParams(window.location.search);
if (params.has("clientId")) {
return params.get("clientId").trim();
}
return null;
}
function updateClientId(newId) {
return new Promise((resolve, reject) => {
if (!newId) return reject("Пустой clientId");
browserAPI.storage.local.set({ clientId: newId }, () => {
if (chrome.runtime?.lastError) {
reject(chrome.runtime.lastError);
} else {
resolve(newId);
}
});
});
}
async function checkClientIdFromURL() {
const newId = getQueryParams();
const msgBox = document.getElementById("client-id-status");
if (!newId) return;
try {
const saved = await updateClientId(newId);
msgBox.textContent = `clientId обновлён: ${saved}`;
msgBox.style.color = "blue";
console.log("[OPTIONS] clientId обновлён через URL:", saved);
} catch (err) {
msgBox.textContent = "Ошибка: " + err;
msgBox.style.color = "red";
console.error("[OPTIONS] Ошибка обновления clientId:", err);
}
}
document.addEventListener("DOMContentLoaded", restoreOptions);
document.querySelector("#settings-form").addEventListener("submit", saveOptions);