Я разрабатываю свое первое расширение Firefox, и для этого я должен получить полный исходный код текущей страницы. Как я могу сделать это с XUL?
действительно похоже, что нет способа получить "весь исходный код". Вы можете использовать
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
Возможно, вы сможете получить его через DOM, используя
var source = document.getElementsByTagName ("html");
, и получите исходный код, используя DOMParser
Первая часть ответа Саги, но вместо этого используйте document.getElementById('viewsource').textContent
.
Для загрузки содержимого вам понадобится объект 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.
Вы можете получить URL с помощью var URL = document.location.href
и перейти к "view-source:" + URL
.
Теперь вы можете получить весь исходный код (источник просмотра - это идентификатор тела):
var code = document.getElementById('viewsource').innerHTML;
Проблема в том, что исходный код отформатирован. Поэтому вам нужно запустить strip_tags () и htmlspecialchars_decode (), чтобы исправить это.
Например, строка 1 должна иметь тип документа, а строка 2 должна выглядеть так:
<<span class="start-tag">HTML</span>>
Таким образом, после strip_tags () она становится:
<HTML>
И после htmlspecialchars_decode () наконец-то мы получили ожидаемый результат:
<HTML>
Код не передается парсеру DOM, поэтому вы также можете просматривать недопустимый HTML.
Больше соответствует ответу Лахлана, но здесь есть обсуждение внутренних функций, которое довольно глубокое, в том числе в коде Cpp.
http://www.mail-archive.com/mozilla-embedding@mozilla.org/msg05391.html
и затем следуйте ответам внизу.