2010-02-25 9 views

ответ

2

действительно похоже, что нет никакого способа, чтобы получить "все исходный код". Вы можете использовать

document.documentElement.innerHTML 

Чтобы получить внутреннийHTML верхнего элемента (обычно html). Если у Вас есть сообщение об ошибке PHP как

<h3>fatal error</h3> 
segfault 

<html> 
    <head> 
     <title>bla</title> 
     <script type="text/javascript"> 
      alert(document.documentElement.innerHTML); 
     </script> 
    </head> 
    <body> 
    </body> 
</html> 

innerHTML будет

<head> 
<title>bla</title></head><body><h3>fatal error</h3> 
segfault  
     <script type="text/javascript"> 
      alert(document.documentElement.innerHTML); 
     </script></body> 

но сообщение об ошибке по-прежнему сохраняет

редактирования: documentElement описано здесь: https://developer.mozilla.org/en/DOM/document.documentElement

+0

Возможно, это то, что я ищу. Однако я не понимаю код примера, который вы опубликовали. Предполагается ли, что второй блок является текстом, напечатанным с помощью 'alert' в первом блоке? Если да, то почему сообщение об ошибке неожиданно появляется внутри тега body? – Franz

+0

yep, вторым кодом был предупрежден код. Возможно, это исправление кода Firefox. Просто скопируйте первый блок в пустой html-файл и попробуйте его :-) –

+0

Это не полный источник. Как вы отметили, все, что не находится между '' и' ', не включается. Ответ Лаклана представляется гораздо лучшим решением. – MatrixFrog

1

Может быть, вы можете получить его с помощью DOM, используя

источник уаг = document.getElementsByTagName ("HTML");

и принести источник с помощью DOMParser

https://developer.mozilla.org/En/DOMParser

+0

getElementsByTagName (примечание: элементы) –

2

Вы можете получить URL-адрес с var URL = document.location.href и перейти к "view-source:"+URL.

Теперь вы можете получить исходный код весь (ViewSource это идентификатор тела):

var code = document.getElementById('viewsource').innerHTML; 

Проблема заключается в том, что исходный код отформатирован. Поэтому вы должны запустить strip_tags() и htmlspecialchars_decode(), чтобы исправить это.

Например, строка 1 должен быть тип документа и линия 2 должна выглядеть следующим образом:

&lt;<span class="start-tag">HTML</span>&gt; 

Таким образом, после strip_tags() становится:

&lt;HTML&gt; 

И после того, как htmlspecialchars_decode() мы, наконец, получить ожидаемый результат:

<HTML> 

Код не переходит к парсер DOM, поэтому y ou также может просматривать недопустимый HTML.

+0

Хммм ... звучит довольно хорошо. Является ли весь код завернутым в элемент с идентификатором 'viewource' или почему вы так делаете? И что вы подразумеваете под «отформатированным»? Удерживаются ли сущности? – Franz

+0

Подумайте об этом как о нормальном HTML-коде. Идентификатор тела - это viewource. Я добавил пример, как это выглядит. Я надеюсь, что у вас есть идеи, как перейти на эту страницу (например, вы можете сделать это со скрытым iframe). – Sagi

+0

Или вы могли бы просто использовать '.textContent' вместо этого. –

5

Вам понадобится объект xul browser для загрузки содержимого.

Загрузите версию страницы «view-source:» в объект браузера, как это делает меню «View Page Source». См. Функцию viewSource() в chrome://global/content/viewSource.js. Эта функция может загружаться из кеша или нет.

После загрузки контента, первоисточником определяется по формуле:

var source = browser.contentDocument.getElementById('viewsource').textContent; 

сериализовать DOM Document
Этот метод не получит оригинал, но может быть полезно для некоторых читателей.

Вы можете сериализовать объект документа в строку. См. Serializing DOM trees to strings в MDC. Возможно, вам придется использовать альтернативный метод создания экземпляра в своем расширении.

В этой статье рассказывается о документах XML, но также работает над любым HTML DOMDocument.

var serializer = new XMLSerializer(); 
var source = serializer.serializeToString(document); 

Это даже работает на веб-странице или в консоли firebug.

+0

Это выглядит довольно полным. Что произойдет, если XHTML будет поврежден из-за некоторой ошибки? – Franz

+0

Парсер DOM уже рассмотрел разбитый HTML, поэтому seriaizer не увидит сломанный источник. –

+0

Возможно, это будет плохо? Имеет ли переменная 'document' свойство' textContent' тоже? – Franz

0

Первая часть ответа Саги, но вместо этого используется document.getElementById('viewsource').textContent.

0

Больше в соответствии с ответом Лаклана, но здесь обсуждается внутренняя часть, которая углубляется в глубину, переходя в код Cpp.

http://www.mail-archive.com/[email protected]/msg05391.html

, а затем следуют ответы в нижней части.

Смежные вопросы