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

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

11
задан Franz 25 February 2010 в 21:56
поделиться

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

2
ответ дан 3 December 2019 в 09:40
поделиться

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

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

, и получите исходный код, используя DOMParser

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

1
ответ дан 3 December 2019 в 09:40
поделиться

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

0
ответ дан 3 December 2019 в 09:40
поделиться

Для загрузки содержимого вам понадобится объект 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.

6
ответ дан 3 December 2019 в 09:40
поделиться

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

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

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, поэтому вы также можете просматривать недопустимый HTML.

2
ответ дан 3 December 2019 в 09:40
поделиться

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

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

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

0
ответ дан 3 December 2019 в 09:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: