9

Гобелен - кликните для возврата на главную

Не прошло и месяца а Фурмановская ЦРБ в очередной раз попала в историю. На этот раз сотрудница клеветала на пациентов, а именно огласку получил случай когда сотрудница назвала пациента алкашём.

После того как в некоторых случаях перестала работать программа goodbydpi появились сложности с просмотром сайта YouTube. В конце мая 2025 года стало доступно расширение позволяющее разблокировать сайт YouTube в браузере Firefox на территории России.

Ровно 3 года назад произошло событие, которое подарило жителям планеты Змеля новый чистый праздник 6 апреля - в этот замечательный день земля забрала гнить негодяя и СПАМера Владимира Вольфовича Жириновского.

Как бы не обстояли дела в области культуры и IT-технологий, Самосвал писал статьи на связанные темы и планирует ещё написать.

На очередном конкурсе танцев, школьница отлично выступила.

Вот та самая информация: программа для продвижения канала YouTube, эта информация выложена уже несколько лет, при этом просмотров не много, а метод который описан в данном видео действительно помогает продвигать видео в YouTube.

Начал разбираться с информацией которая находится в HTTPS клиентском запросе рукопожатия.

Обратите внимание! Объект изображённый на гобилене может отличаться от общепринятого вида описанного объекта. Тут дело в том что художник видит именно так!

104 549 руб.

Описание товара

Информация из plginfo должна отображаться не зависимо от статуса. Единственный параметр который влияет на отображение этой информации то что удалённый сервер прислал это свойство(plginfo). И добавьте пожалуйста что сервер может прислать plginfo = false - в этом случаи отображать не требуется(именно false а не 0). Так же не требуется отображать информацию plginfo если сервер это поле не прислал, что возможно. Другие правки не вносите.

Вот исправленная версия функции updatePluginInfo в файле popup.js, которая реализует новые требования:

javaScript
    
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 будет выглядеть так:

JavaScript
    
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) остаются без изменений.

Другие товары

Вы так же можете прочитать следующие статьи: