我正在开发我的第一个Firefox扩展,为此我需要获取当前页面的完整源代码。我怎么能用XUL做到这一点?
答案 0 :(得分:6)
您需要一个xul browser对象来加载内容。
将“view-source:”版本的页面加载到浏览器对象中,方法与“查看页面源”菜单相同。请参阅chrome://global/content/viewSource.js
中的函数viewSource()。该功能可以从缓存加载。
加载内容后,原始来源为:
var source = browser.contentDocument.getElementById('viewsource').textContent;
序列化DOM文档
此方法不会获得原始来源,但可能对某些读者有用。
您可以将文档对象序列化为字符串。请参阅MDC中的Serializing DOM trees to strings。您可能需要在扩展中使用替代的实例化方法。
那篇文章讨论的是XML文档,但它也适用于任何HTML DOMDocument。
var serializer = new XMLSerializer();
var source = serializer.serializeToString(document);
这甚至适用于网页或firebug控制台。
答案 1 :(得分:2)
看起来真的没有办法获得“所有的源代码”。你可以使用
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
答案 2 :(得分:2)
您可以使用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。
答案 3 :(得分:1)
也许你可以通过DOM使用
获得它var source = document.getElementsByTagName(“html”);
使用DOMParser
获取源代码答案 4 :(得分:0)
Sagi的答案的第一部分,但改为使用document.getElementById('viewsource').textContent
。
答案 5 :(得分:0)
更符合Lachlan的回答,但是这里有一个关于内部的讨论,深入探讨了Cpp代码。
http://www.mail-archive.com/mozilla-embedding@mozilla.org/msg05391.html
然后按照底部的回复。