私は最初のFirefox拡張機能を開発しており、そのために現在のページの完全なソースコードを取得する必要があります。XULでそれを行うにはどうすればよいですか?
6 に答える
コンテンツをロードするには、xulブラウザオブジェクトが必要です。
「ページソースの表示」メニューと同じ方法で、ページの「view-source:」バージョンをブラウザオブジェクトにロードします。の関数viewSource()を参照してくださいchrome://global/content/viewSource.js
。その関数はキャッシュからロードできるかどうかはわかりません。
コンテンツが読み込まれると、元のソースは次のようになります。
var source = browser.contentDocument.getElementById('viewsource').textContent;
DOMドキュメントのシリアル化
このメソッドは元のソースを取得しませんが、一部の読者には役立つ場合があります。
ドキュメントオブジェクトを文字列にシリアル化できます。MDCでのDOMツリーの文字列へのシリアル化を参照してください。拡張機能で別のインスタンス化方法を使用する必要がある場合があります。
この記事ではXMLドキュメントについて説明していますが、HTMLDOMDocumentでも機能します。
var serializer = new XMLSerializer();
var source = serializer.serializeToString(document);
これは、Webページやfirebugコンソールでも機能します。
でURLを取得しvar URL = document.location.href
、に移動できます"view-source:"+URL
。
これで、ソースコード全体をフェッチできます(viewsourceは本文のIDです)。
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も表示できます。
「すべてのソースコード」を取得する方法は本当にないようです。あなたは使用することができます
document.documentElement.innerHTML
最上位要素(通常はhtml)のinnerHTMLを取得します。次のような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>
ただし、エラーメッセージは保持されます
編集:documentElementはここで説明されています: https ://developer.mozilla.org/en/DOM/document.documentElement
たぶんあなたはDOMを介してそれを取得することができます
var source = document.getElementsByTagName( "html");
DOMParserを使用してソースをフェッチします
サギの答えの最初の部分ですが、document.getElementById('viewsource').textContent
代わりに使用してください。
Lachlanの答えにもっと一致していますが、ここでは、Cppコードに入る、非常に詳細な内部の説明があります。
http://www.mail-archive.com/mozilla-embedding@mozilla.org/msg05391.html
次に、下部の返信に従います。