繁体   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