Как получить источник HTML со страницы?

18

Есть ли способ получить доступ к исходному HTML-коду страницы с помощью javascript?

Я знаю, что могу использовать document.body.innerHTML , но он содержит только код внутри тела. Я хочу получить весь исходный код страницы, включая теги head и body с их содержимым, и, если возможно, также тег html и doctype. Возможно ли это?

    
задан mck89 02.09.2009 в 15:05
источник

5 ответов

27

Используйте

document.documentElement.outerHTML

или

document.documentElement.innerHTML
    
ответ дан Eldar Djafarov 02.09.2009 в 15:07
источник
  • @ mck89: нет браузера, но у IE будет внешнийHTML. –  Crescent Fresh 02.09.2009 в 15:21
  • Имейте в виду, что источником, который вы получаете с Firefox / большинством браузеров, является «истинный» источник, который вы подавали. В IE вы получите «живой» HTML-код этой страницы, включая любые изменения, внесенные пользователем в формы, любое новое содержимое DOM и т. Д. В IE это будет также смешанный недопустимый суп-тег, который IE предоставляет при запросе .innerHTML элементы. –  scunliffe 02.09.2009 в 15:35
  • В случае, если кто-либо еще изучает это, ситуация несколько изменилась. @Crescent Fresh была правильной 2 года назад, однако в более поздних версиях Chrome и Safari также реализована HTMLELement.outerHTML - хотя на момент написания Firefox Firefox этого не делает. –  Liam Newmarch 19.08.2011 в 12:32
  • @LiamNewmarch через 2 года после вашего комментария, который был через 2 года после первого сообщения, и кажется, что теперь Firefox также реализует внешнийHTML. :) –  Kip 12.08.2013 в 16:50
  • Это текущее состояние DOM, а не исходный код. –  Lothar 10.05.2015 в 10:37
13

Это можно сделать в однострочном режиме, используя XMLSerializer .

var generatedSource = new XMLSerializer().serializeToString(document);

Что дает String

<!DOCTYPE html><html><head>

<title>html - javascript page source code - Stack Overflow</title>
...
    
ответ дан Paul S. 03.07.2013 в 16:40
источник
8

Один из способов сделать это - перепроверить страницу с помощью XMLHttpRequest , тогда вы получите весь страницы на веб-сервере.

    
ответ дан Paul Dixon 02.09.2009 в 15:08
источник
1

При условии, что

  • Требуется исходный исходный код html (не текущая сериализация DOM)
  • и чтобы страница была загружена с использованием метода GET,

источник страницы может быть повторно загружен:

fetch(document.location.href)
    .then(response => response.text())
    .then(pageSource => /* ... */)
    
ответ дан czerny 25.06.2017 в 01:15
источник
  • Это ненадежно, потому что нет гарантии, что сервер будет обслуживать один и тот же контент в следующий раз. –  Szczepan Hołyszewski 23.09.2017 в 04:43
0

Для IE вы также можете использовать: document.all [0] .outerHTML

    
ответ дан DmitryK 02.09.2009 в 15:23
источник