zkrvndm
@zkrvndm
Архитектор решений

Как снести все скрипты на странице?

Как снести все скрипты на странице? Обработчики, таймеры - всё, всё, всё. Раньше для этих целей использовал:
document.write(''); document.close(); // Запускал из контент-скрипта своего браузерного расширения

После чего спокойно загружал на станицу уже свое содержимое, будучи уверенным, что скрипты сайта мне уже ничего не поломают. К сожалению, оказалось, что в браузере Firefox это не работает =( Может подскажет кто решение для Firefox?
  • Вопрос задан
  • 1193 просмотра
Решения вопроса 2
@GrayHorse
Запретить выполнение JS кода (как инлайн, так и загружаемого) можно с помощью Content Security Policy (CSP) заголовков, как это делают NoScript расширения, в частости, uBlock Origin.

Хотя не уверен, что в таком случае можно выполнить свой код в контексте веб страницы (не в в контексте контент скрипта), хотя, вероятно, можно разрешить сделать это, указав hash/nonce своего кода, в качестве разрешенного к выполнению (опять же — в CSP заголовке).
Ответ написан
Комментировать
zkrvndm
@zkrvndm Автор вопроса
Архитектор решений
Спасибо Aetae за подсказанное решение, которое работает в Firefox:
document.wrappedJSObject.write(''); document.close();

Если запустить метод из контент-скрипта в своем расширении еще до начала отрисовки DOM, то это позволяет предотвратить запуск скриптов сайта, а далее на страницу уже можно спокойно залить свое содержимое.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
AgentSmith
@AgentSmith
Это мой правильный ответ на твой вопрос
Можно поставить AdBlock и прописать фильтр для скриптов по маске *.js
Ответ написан
Комментировать
profesor08
@profesor08 Куратор тега JavaScript
Вот конфиг и описание: https://developer.chrome.com/docs/extensions/mv2/c...
Для firefox https://developer.mozilla.org/en-US/docs/Mozilla/A...

Если это позволит подчистить html от лишнего, то хорошо, иначе придется смириться с тем, что все скрипты идущие со страницей будут выполнены.

P.S. На выполнение скриптов можно забить и построить собственную html страницу. Которая никак не будет с ними взаимодействовать.
Ответ написан
@romant094
Frontend-developer
Если надо вычистить DOM от скриптов, то вот так:
document.querySelectorAll('script').forEach(item => item.remove())
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы