![](/img/trans.png)
[英]Firefox Extensions: adding functionality to existing Chrome XUL elements
[英]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行應如下所示:
<<span class="start-tag">HTML</span>>
所以在strip_tags ()之后變成:
<HTML>
在htmlspecialchars_decode ()之后我們終於得到了預期的結果:
<HTML>
代碼不會傳遞給DOM解析器,因此您也可以查看無效的HTML。
也許你可以通過DOM獲得它,使用
var source = document.getElementsByTagName(“html”);
並使用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.