Я разрабатываю свое первое расширение 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 должна выглядеть так:
<<span class="start-tag">HTML</span>>
Итак, после strip_tags() он становится:
<HTML>
И после htmlspecialchars_decode() мы наконец получим ожидаемый результат:
<HTML>
Код не переходит к парсеру DOM, поэтому вы можете также просмотреть недопустимый HTML.
Ответ 4
Возможно, вы можете получить его через DOM, используя
var source = document.getElementsByTagName( "html" );
и выберите источник с помощью DOMParser
Ответ 5
Первая часть ответа Sagi, но вместо этого используйте document.getElementById('viewsource').textContent
.
Ответ 6
Больше в соответствии с ответом Лаклана, но здесь обсуждается внутренняя структура, которая углубляется в глубину, перейдя в код Cpp.
http://www.mail-archive.com/[email protected]/msg05391.html
а затем выполните ответы внизу.