расширение для веб-браузера: остановить все дальнейшие выполнения javascript

Вопрос или проблема

После загрузки веб-страницы она часто продолжает потреблять от 25% до 100% моего ЦП. Иногда это связано с рендерингом чрезмерной или плохо разработанной графики, например, анимированного фона. В другие разы это намного более злонамеренно — несанкционированное использование моего ЦП в суперкомпьютере кого-то. Я хотел бы кнопку, которая, при нажатии, приостанавливает выполнение всего дальнейшего javascript в данной вкладке до тех пор, пока кнопка не будет нажата снова или пока не будет выполнен переход на другой веб-сайт.

Пожалуйста, обратите внимание, это не то же самое, что и уже существующая кнопка “остановить”. Эта кнопка не останавливает дальнейшее выполнение javascript.

Как это реализовано или какой браузер мне придется использовать (лишь бы это не был ie или safari) для меня неважно.

Для Firefox (по крайней мере на Windows) есть дополнение под названием Noscript.

Оно показывает вам все скрипты на сайте, и вы можете решить, какие из них заблокировать. Эти решения сохраняются для каждого сайта.

Для нового сайта я начинаю со всех заблокированных. Затем я включаю невинно выглядящие, по одному за раз, пока сайт не заработает.

Ответ или решение

Остановка выполнения JavaScript в браузере: Как создать расширение

Современные веб-страницы часто используют ресурсы вашего устройства более интенсивно, чем необходимо. Это может приводить к значительной загрузке процессора — от 25% до 100% — что не только подрывает производительность вашего компьютера, но и может вызывать повышенное тепло и шум системы. В этой статье мы рассмотрим, как разработать расширение для веб-браузера, которое позволит остановить выполнение JavaScript в текущей вкладке, при этом предоставляя пользователю возможность возобновить его по мере необходимости.

1. Проблема и запрос

Как описано в вопросе, после загрузки веб-страницы некоторые сайты используют часть ресурсов вашего процессора, чтобы выполнять неэффективный или ненужный код. Классифицируем эти задачи как:

  • Ненужные анимации и графика: Некоторые страницы перегружены анимациями и визуальными эффектами, которые могут быть отключены без потери функциональности.
  • Нежелательное использование ресурсов: Есть вероятность, что ресурсы вашего процессора используются для выполнения нежелательных запросов, таких как криптомайнинг и другие аналогичные задачи.

Пользователи ищут способ остановить выполнение JavaScript после полной загрузки страницы, чтобы вновь возобновить его по желанию.

2. Возможные решения

На сегодняшний день существует несколько вариантов, которые могут помочь в решении этой задачи:

  • Расширения браузера: Это наиболее оптимальный способ. В частности, существует множество расширений для Firefox и Chrome, которые могут блокировать выполнение скриптов на веб-страницах.

  • Noscript: Для пользователей Firefox есть расширение под названием Noscript, которое отображает все скрипты на сайте и позволяет блокировать или разрешать их по вашему желанию. Оно позволяет начинать с блокировки всех скриптов и добавлять их по одному, что может помочь в выявлении ресурсоемких или нежелательных скриптов.

  • Кастомные решения: Другие браузеры также поддерживают создание расширений с аналогичным функционалом. Например, можно разработать Chrome Extension с использованием API для Stop JavaScript execution, что позволяет управлять выполнением скриптов по нажатию кнопки.

3. Пример реализации расширения для Chrome

Вот краткий обзор того, как вы можете создать свое собственное расширение для Google Chrome:

  1. Структура проекта:

    my-extension/
    ├── manifest.json
    ├── popup.html
    ├── popup.js
    └── background.js
  2. manifest.json:

    {
     "manifest_version": 3,
     "name": "Halt JS Execution",
     "version": "1.0",
     "permissions": ["tabs", "scripting"],
     "action": {
       "default_popup": "popup.html"
     },
     "background": {
       "service_worker": "background.js"
     }
    }
  3. popup.html:

    <!DOCTYPE html>
    <html>
    <head>
       <style>
           button { width: 100px; height: 40px; }
       </style>
    </head>
    <body>
       <button id="toggle">Остановить JS</button>
       <script src="popup.js"></script>
    </body>
    </html>
  4. popup.js:

    let isStopped = false;
    
    document.getElementById("toggle").onclick = async () => {
       const [tab] = await chrome.tabs.query({ active: true, currentWindow: true });
       if (isStopped) {
           await chrome.scripting.executeScript({
               target: { tabId: tab.id },
               function: () => {
                   const scripts = document.querySelectorAll('script');
                   scripts.forEach(script => { script.remove(); });
               }
           });
           isStopped = false;
           document.getElementById("toggle").innerText = "Остановить JS";
       } else {
           // Здесь можно добавить логику для остановки выполнения JS
           isStopped = true;
           document.getElementById("toggle").innerText = "Возобновить JS";
       }
    };
  5. background.js:
    Комментарии к этому файлу будут зависеть от того, нужна ли выполнением фона.

4. Заключение

Создание расширения для остановки выполнения JavaScript потребует некоторых технических знаний и навыков программирования, однако предложенные выше шаги делают эту задачу вполне осуществимой. Используя это решение, вы сможете существенно снизить нагрузку на процессор и повысить производительность браузера. Расширение может также предоставить пользователю больше контроля над тем, какие ресурсы используются страницами, что в итоге приведет к более комфортному веб-серфингу.

Оцените материал
Добавить комментарий

Капча загружается...