Но функции и скрипты от предыдущей страницы продолжают работать как ни в чем не бывало. Как их вычистить из того места, где они есть? Чтобы была совершенно чистая страница?
Shimpanze, во-первых, это может быть глюк отладчика, считающего, что удалять head и body низзя, во-вторых, даже если нет: обе пары-то пустые.
Можно ещё вывести все эти heads и bodies в консоль по отдельности и глянуть их слушатели.
Наверное, можно укокошить весь HTML старой страницы и создать поверх старой страницы iframe во всё окно. Он будет чист от скриптов и слушателей событий, и если ему дать достаточно большой z-index, то потенциально создаваемые старыми скриптами элементы не будут появляться поверх.
Можно удалить все до <html> включительно document.body.parentElement.remove()
Объект window останется, конечно, и все переменные в нем.
Теоретически можно перебрать все его свойства, и по каким-то критериям поудалять "лишнее", но я не сомневаюсь в успехе этой затеи.
Думаю, тут речь идёт об асинхронных запросах.
То есть, на живую страницу подгружается динамически новый контент, происходит рендеринг, а скрипты с предыдущей страницы продолжают работать, хоть уже и не нужны.
Сервер тут помочь не сможет.