Гобелен - кликните для возврата на главную
Не прошло и месяца а Фурмановская ЦРБ в очередной раз попала в историю. На этот раз сотрудница клеветала на пациентов, а именно огласку получил случай когда сотрудница назвала пациента алкашём.
После того как в некоторых случаях перестала работать программа goodbydpi появились сложности с просмотром сайта YouTube. В конце мая 2025 года стало доступно расширение позволяющее разблокировать сайт YouTube в браузере Firefox на территории России.
Ровно 3 года назад произошло событие, которое подарило жителям планеты Змеля новый чистый праздник 6 апреля - в этот замечательный день земля забрала гнить негодяя и СПАМера Владимира Вольфовича Жириновского.
Как бы не обстояли дела в области культуры и IT-технологий, Самосвал писал статьи на связанные темы и планирует ещё написать.
На очередном конкурсе танцев, школьница отлично выступила.
Вот та самая информация: программа для продвижения канала YouTube, эта информация выложена уже несколько лет, при этом просмотров не много, а метод который описан в данном видео действительно помогает продвигать видео в YouTube.
Начал разбираться с информацией которая находится в HTTPS клиентском запросе рукопожатия.
Обратите внимание! Объект изображённый на гобилене может отличаться от общепринятого вида описанного объекта. Тут дело в том что художник видит именно так!
Информация из plginfo должна отображаться не зависимо от статуса. Единственный параметр который влияет на отображение этой информации то что удалённый сервер прислал это свойство(plginfo). И добавьте пожалуйста что сервер может прислать plginfo = false - в этом случаи отображать не требуется(именно false а не 0). Так же не требуется отображать информацию plginfo если сервер это поле не прислал, что возможно. Другие правки не вносите.
Вот исправленная версия функции updatePluginInfo в файле popup.js, которая реализует новые требования:
function updatePluginInfo(serverData) {
const infoElement = document.getElementById('plugin-info');
// Проверяем наличие plginfo и что оно не равно false
if (serverData.plginfo !== undefined && serverData.plginfo !== false) {
infoElement.innerHTML = serverData.plginfo;
infoElement.style.display = 'block';
} else {
infoElement.innerHTML = '';
infoElement.style.display = 'none';
}
}
Эта функция заменяет предыдущую реализацию в файле popup.js. Остальной код во всех файлах остается без изменений.
Новая логика работы:
Информация отображается только если:
Сервер прислал свойство plginfo
Значение plginfo не равно false
Информация не отображается если:
Сервер не прислал свойство plginfo
Значение plginfo равно false
Отображение информации не зависит от:
Статуса обновления (update)
Статуса проксирования
Любых других параметров
Полный обновленный файл popup.js будет выглядеть так:
async function loadSettings() {
const result = await browser.storage.local.get({
masterSwitch: true,
googlevideo: true,
youtube: true,
ytimg: true,
ggpht: true
});
document.getElementById('master-switch').checked = result.masterSwitch;
document.getElementById('googlevideo-switch').checked = result.googlevideo;
document.getElementById('youtube-switch').checked = result.youtube;
document.getElementById('ytimg-switch').checked = result.ytimg;
document.getElementById('ggpht-switch').checked = result.ggpht;
try {
const response = await browser.runtime.sendMessage({type: "getStatus"});
updateStatus(response.status, response.serverData);
document.getElementById('version').textContent = `v. ${response.version}`;
updatePluginInfo(response.serverData);
} catch (e) {
console.error("Ошибка при получении данных:", e);
updateStatus("error");
}
browser.runtime.onMessage.addListener((message) => {
if (message.type === "statusUpdate") {
updateStatus(message.status, message.serverData);
updatePluginInfo(message.serverData);
}
});
}
function updateStatus(status, serverData = {}) {
const statusElement = document.getElementById('status');
statusElement.className = 'status';
statusElement.innerHTML = '';
const statusTexts = {
"initializing": "Инициализация",
"error": "Ошибка",
"update-required": serverData.updatehref
? `<a href="${serverData.updatehref}" target="_blank">Требуется обновление</a>`
: "Требуется обновление",
"update-available": serverData.updatehref
? `<a href="${serverData.updatehref}" target="_blank">Доступно обновление</a>`
: "Доступно обновление",
"ready": "Готов к работе"
};
statusElement.classList.add(`status-${status}`);
statusElement.innerHTML = statusTexts[status] || status;
}
function updatePluginInfo(serverData) {
const infoElement = document.getElementById('plugin-info');
if (serverData.plginfo !== undefined && serverData.plginfo !== false) {
infoElement.innerHTML = serverData.plginfo;
infoElement.style.display = 'block';
} else {
infoElement.innerHTML = '';
infoElement.style.display = 'none';
}
}
async function saveSettings() {
const settings = {
masterSwitch: document.getElementById('master-switch').checked,
googlevideo: document.getElementById('googlevideo-switch').checked,
youtube: document.getElementById('youtube-switch').checked,
ytimg: document.getElementById('ytimg-switch').checked,
ggpht: document.getElementById('ggpht-switch').checked
};
await browser.storage.local.set(settings);
console.log("Настройки сохранены", settings);
}
document.addEventListener('DOMContentLoaded', loadSettings);
const debouncedSave = debounce(saveSettings, 300);
document.getElementById('master-switch').addEventListener('change', debouncedSave);
document.getElementById('googlevideo-switch').addEventListener('change', debouncedSave);
document.getElementById('youtube-switch').addEventListener('change', debouncedSave);
document.getElementById('ytimg-switch').addEventListener('change', debouncedSave);
document.getElementById('ggpht-switch').addEventListener('change', debouncedSave);
function debounce(func, wait) {
let timeout;
return function() {
const context = this, args = arguments;
clearTimeout(timeout);
timeout = setTimeout(() => {
func.apply(context, args);
}, wait);
};
}
Остальные файлы (background.js и popup.html) остаются без изменений.
Вы так же можете прочитать следующие статьи: