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

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

6 ответов


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

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


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

загрузите версию" 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.


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

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

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.


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

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

и получить источник с помощью DOMParser

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


первая часть ответа саги, но использовать .


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

http://www.mail-archive.com/mozilla-embedding@mozilla.org/msg05391.html

а затем следуйте ответам внизу.