Удалите все содержимое с помощью чистого JS

Я ищу способ удалить весь контент веб-страницы, используя чистые библиотеки Javascript - no.

Я пробовал:

document.documentElement.innerHTML = "whatever";

но это не работает: оно заменяет внутреннюю часть элемента <html/>. Я смотрю на замену всего документа, включая, если возможно, объявление doctype и <?xml.

Ответы

Ответ 1

Я думаю, что браузер по праву предполагает, что страница с типом контента text/html всегда будет веб-страницей, поэтому пока вы можете сделать что-то вроде...

document.body.innerHTML = '';

У него все еще будет висящий HTML.

Вы можете попробовать...

document.documentElement.innerHTML = '';

..., который оставил меня с <html></html>.

Йи Цзян предлагал что-то умное.

window.location = 'about:blank';

Это приведет вас к пустой странице - внутреннему механизму, предоставляемому большинством браузеров, которые я считаю.

Я считаю, что лучшим решением является использование document.open(), который очистит экран.

Ответ 2

var i = document.childNodes.length - 1;

while (i >= 0) {
  console.log(document.childNodes[i]);
  document.removeChild(document.childNodes[i--]);
}

Удаляет все (doctype) также на FF 3.6, Chrome 3.195 и Safari 4.0. IE8 прерывается, так как ребенок хочет удалить родителя.


Повторное создание позже, также можно сделать следующим образом:

while (document.firstChild) {
  document.removeChild(document.firstChild);
}

Ответ 3

Согласно статье статьи Dotoro по методу document.clear, они (с тех пор, как устарели) рекомендуют вместо этого называть document.open, что очищает страницу, так как он запускает новый поток.

Таким образом, вы избегаете неприятного взлома about:blank.

Ответ 4

После того, как страница уже полностью загружена:

document.write('');
document.close();

Ответ 5

Я верю, что это сделает это

document.clear()  //deprecated

window.location = "about:blank"  //this clears out everything

Ответ 6

Мне просто интересно, почему вы хотите это сделать. Теперь нет того, что я знаю, чтобы заменить абсолютно все до декларации doctype, но если вы хотите пойти на эти длины, то почему бы не перенаправить пользователя на специально созданную страницу с шаблоном, который вам нужен, с требуемым типом doctype, а затем заполнить там контент?

EDIT: в ответ на комментарий, что вы можете сделать, это удалить весь контент, а затем создать iframe, чтобы он заполнил всю страницу, а затем вы полностью контролируете содержимое. Имейте в виду, что это большой взлом и, вероятно, будет очень болезненным, но он будет работать:)

Ответ 7

document.documentElement.innerHTML='';
document.open();

Метод Document.open() открывает документ для записи. если вы не используете открытый метод, вы не можете изменить документ после установки innerhtml на пустую строку

Ответ 8

Я считаю, что это все равно оставит doctype node висящим, но:

document.documentElement.remove()

или эквивалентный

document.getElementsByTagName("html")[0].remove()

Ответ 9

УДАЛИТЕ ВСЕ, НО ---! DOCTYPE html ---

var l = document.childNodes.length;    
while (l > 1) { var i = document.childNodes[1]; document.removeChild(i); l--; }

ИСПЫТАНИЕ НА ИНТЕРНЕТЕ FIREFOX WEB - childNodes [1] IS ---! DOCTYPE html ---