簡體   English   中英

Firefox擴展和XUL:獲取頁面源代碼

[英]Firefox extensions & XUL: get page source code

我正在開發我的第一個Firefox擴展,為此我需要獲得當前頁面的完整源代碼。 我怎么能用XUL做到這一點?

您將需要一個xul 瀏覽器對象來加載內容。

將“view-source:”版本的頁面加載到瀏覽器對象中,方法與“查看頁面源”菜單相同。 請參閱chrome://global/content/viewSource.js函數viewSource()。 該函數可以從緩存加載,也可以不加載。

加載內容后,原始來源由下式給出:

var source = browser.contentDocument.getElementById('viewsource').textContent;

序列化DOM文檔
此方法不會獲得原始來源,但可能對某些讀者有用。

您可以將文檔對象序列化為字符串。 請參閱在MDC中將DOM樹序列化為字符串 您可能需要在擴展中使用替代的實例化方法。

那篇文章討論了XML文檔,但它也適用於任何HTML DOMDocument。

var serializer = new XMLSerializer();
var source = serializer.serializeToString(document);

這甚至可以在網頁或firebug控制台中使用。

真的看起來沒有辦法得到“所有的源代碼”。 你可以用

document.documentElement.innerHTML

獲取top元素的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>

但錯誤信息仍將保留

編輯:documentElement在這里描述: https//developer.mozilla.org/en/DOM/document.documentElement

您可以使用var URL = document.location.href獲取URL並導航到"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。

也許你可以通過DOM獲得它,使用

var source = document.getElementsByTagName(“html”);

並使用DOMParser獲取源代碼

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

Sagi的第一部分答案,但是使用document.getElementById('viewsource').textContent代替。

更符合Lachlan的回答,但是這里有一個關於內部的討論,深入到Cpp代碼中。

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

然后按照底部的回復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM