Расширения Firefox и XUL: получите исходный код страницы

Я разрабатываю свое первое расширение Firefox и для этого мне нужно получить полный исходный код текущей страницы. Как я могу это сделать с помощью XUL?

Ответ 1

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

document.documentElement.innerHTML

чтобы получить innerHTML верхнего элемента (обычно 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>

но сообщение об ошибке все равно сохранит

edit: documentElement описан здесь: https://developer.mozilla.org/en/DOM/document.documentElement

Ответ 2

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

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

После загрузки содержимого исходный источник указывается:

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

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

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

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

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

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

Ответ 3

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

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

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

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

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

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

Итак, после strip_tags() он становится:

&lt;HTML&gt;

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

<HTML>

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

Ответ 4

Возможно, вы можете получить его через DOM, используя

var source = document.getElementsByTagName( "html" );

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

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

Ответ 5

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

Ответ 6

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

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

а затем выполните ответы внизу.