Расширения 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 должна выглядеть так:
<<span class="start-tag">HTML</span>>
таким образом, после strip_tags() это становится:
<HTML>
и после htmlspecialchars_decode () мы, наконец, получаем ожидаемый результат:
<HTML>
код не передается парсеру DOM, поэтому вы также можете просмотреть недопустимый HTML.
возможно, вы можете получить его через DOM, используя
var source =document.getElementsByTagName ("html");
и получить источник с помощью DOMParser
больше в соответствии с ответом Лахлана, но здесь есть обсуждение внутренних органов, которое становится довольно глубоким, входя в код Cpp.
http://www.mail-archive.com/mozilla-embedding@mozilla.org/msg05391.html
а затем следуйте ответам внизу.