11

私は最初のFirefox拡張機能を開発しており、そのために現在のページの完全なソースコードを取得する必要があります。XULでそれを行うにはどうすればよいですか?

4

6 に答える 6

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コンソールでも機能します。

于 2010-03-06T14:34:02.087 に答える
2

でURLを取得しvar URL = document.location.href、に移動できます"view-source:"+URL

これで、ソースコード全体をフェッチできます(viewsourceは本文のIDです)。

var code = document.getElementById('viewsource').innerHTML;

問題は、ソースコードがフォーマットされていることです。したがって、strip_tags()とhtmlspecialchars_decode()を実行して修正する必要があります。

たとえば、1行目はdoctypeで、2行目は次のようになります。

&lt;<span class="start-tag">HTML</span>&gt;

したがって、strip_tags()の後、次のようになります。

&lt;HTML&gt;

そして、htmlspecialchars_decode()の後、最終的に期待される結果が得られます。

<HTML>

コードはDOMパーサーに渡されないため、無効なHTMLも表示できます。

于 2010-03-05T14:16:39.020 に答える
2

「すべてのソースコード」を取得する方法は本当にないようです。あなたは使用することができます

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

于 2010-03-02T14:45:01.790 に答える
1

たぶんあなたはDOMを介してそれを取得することができます

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

DOMParserを使用してソースをフェッチします

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

于 2010-03-01T13:36:05.540 に答える
0

サギの答えの最初の部分ですが、document.getElementById('viewsource').textContent代わりに使用してください。

于 2010-03-06T16:49:00.037 に答える
0

Lachlanの答えにもっと一致していますが、ここでは、Cppコードに入る、非常に詳細な内部の説明があります。

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

次に、下部の返信に従います。

于 2010-04-12T10:22:20.830 に答える