Один из вариантов - использовать userscript : fetch
текущей страницы, проанализировать текст ответа в документе, удалить все теги <script>
в документе, а затем открыть новое окно с window.open()
и заполните его <head>
и <body>
очищенными документами <head>
и <body>
:
window.openPageWithoutScripts = async function() {
const resp = await fetch(window.location.href);
const text = await resp.text();
const doc = new DOMParser().parseFromString(text, 'text/html');
doc.querySelectorAll('script').forEach(script => script.remove());
const w = window.open();
w.document.head.innerHTML = doc.head.innerHTML;
w.document.body.innerHTML = doc.body.innerHTML;
};
Затем, когда вы хотите открыть текущую страницу без каких-либо сценариев, откройте консоль и введите openPageWithoutScripts()
.
Это удаляет <script>
теги, но не встроенные обработчики, которые менее предсказуемы и от которых сложнее избавиться (хотя, к счастью, они являются плохой практикой и, как правило, реже).
Чтобы также удалить встроенные обработчики, создайте массив всех возможных событий, затем выполните итерации по ним и querySelectorAll
элементам с этими обработчиками и удалите атрибут:
window.openPageWithoutScripts = async function() {
const resp = await fetch(window.location.href);
const text = await resp.text();
const doc = new DOMParser().parseFromString(text, 'text/html');
doc.querySelectorAll('script').forEach(script => script.remove());
const eventNames = ['click', 'load', 'error']; // etc
eventNames.forEach((e) => {
const onEventName = 'on' + e;
document.querySelectorAll(`[${onEventName}]`).forEach((elm) => {
elm.removeAttribute(onEventName);
});
});
const w = window.open();
w.document.head.innerHTML = doc.head.innerHTML;
w.document.body.innerHTML = doc.body.innerHTML;
};