Javascript Firefox扩展&;XUL:获取页面源代码
我正在开发我的第一个Firefox扩展,为此我需要获得当前页面的完整源代码。如何使用XUL实现这一点?也许您可以通过DOM使用 var source=document.getElementsByTagName(“html”) 并使用DOMParser获取源代码Javascript Firefox扩展&;XUL:获取页面源代码,javascript,xul,firefox-addon,innerhtml,Javascript,Xul,Firefox Addon,Innerhtml,我正在开发我的第一个Firefox扩展,为此我需要获得当前页面的完整源代码。如何使用XUL实现这一点?也许您可以通过DOM使用 var source=document.getElementsByTagName(“html”) 并使用DOMParser获取源代码 看起来真的没有办法得到“所有的源代码”。你可以用 document.documentElement.innerHTML 获取顶部元素的innerHTML(通常是html)。如果您有一条php错误消息,如 <h3>fatal
看起来真的没有办法得到“所有的源代码”。你可以用
document.documentElement.innerHTML
获取顶部元素的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>
致命错误
断层
布拉
警报(document.documentElement.innerHTML);
innerHTML将是
<head>
<title>bla</title></head><body><h3>fatal error</h3>
segfault
<script type="text/javascript">
alert(document.documentElement.innerHTML);
</script></body>
致命错误
断层
警报(document.documentElement.innerHTML);
但错误消息仍将保留
编辑:documentElement如下所述:
您可以使用
var URL=document.location.href
获取URL,并导航到“查看源代码:”+URL
现在您可以获取整个源代码(viewsource是主体的id):
问题是源代码是格式化的。因此,您必须运行()和()来修复它
例如,第1行应该是doctype,第2行应该是:
<<span class="start-tag">HTML</span>>
在()之后,我们最终得到了预期的结果:
<HTML>
代码不会传递给DOM解析器,因此您也可以查看无效的HTML。您需要一个xul对象来加载内容
以与“查看页面源”菜单相同的方式,将页面的“查看源:”版本加载到浏览器对象中。请参见chrome://global/content/viewSource.js
。该函数可以从缓存加载,也可以不从缓存加载
加载内容后,原始源由以下内容提供:
var source = browser.contentDocument.getElementById('viewsource').textContent;
序列化DOM文档此方法不会获取原始源代码,但可能对某些读者有用 可以将文档对象序列化为字符串。见MDC中的。您可能需要在扩展中使用另一种实例化方法 这篇文章讨论了XML文档,但它也适用于任何HTML文档
var serializer = new XMLSerializer();
var source = serializer.serializeToString(document);
这甚至可以在网页或firebug控制台中使用。这是Sagi答案的第一部分,但是使用
document.getElementById('viewsource').textContent
。与Lachlan的答案更加一致,但是这里对内部的讨论非常深入,深入到Cpp代码中
然后按照底部的回复进行操作。getElementsByTagName(注意:elements)这可能就是我要找的。但是,我不理解您发布的示例代码。第二个块是否应该是通过第一个块中的
alert
打印的文本?如果是这样,为什么错误消息会突然出现在正文
标记中?是的,第二个代码块就是被警告的代码。这可能是firefox的代码更正。只需将第一个块复制到一个空的html文件中并进行尝试:-)这不是完整的源代码。正如您所指出的,不在
和
之间的所有内容都不包括在内。拉克兰的答案似乎是一个更好的解决方案。。。听起来不错。整个代码是否包装在ID为viewsource
的元素中,或者为什么要这样做?“格式化”是什么意思?实体是否已转义?请将其视为正常的HTML代码。主体id为viewsource。我已经添加了它的外观示例。我希望你对如何进入这个页面有一些想法(例如,你可以使用隐藏的iframe),或者你可以只使用.textContent
。@Eli:Huh@啊,谢谢你的解释。弗兰兹:你不需要所有这些。只需使用document.getElementById('viewsource')。textContent
这看起来也很完整。但是,如果XHTML由于某些错误而被破坏,会发生什么情况呢?DOM解析器将已经处理了被破坏的HTML,因此Serializer将不会看到被破坏的源代码。那可能是不好的?document
变量是否也具有属性textContent
?您的编辑看起来非常有趣。如果这是可行的,这应该是它。我正在试验这个解决方案,它似乎是完美的工作到目前为止!谢谢你,拉克兰@Franz我认为创建一个新的(document.createElement('browser')
)应该可以,但是你也可以把它放在你的主覆盖XUL:
,当然,在你的js文件中:var browser=document.getElementById('invisibleBrowser')
var source = browser.contentDocument.getElementById('viewsource').textContent;
var serializer = new XMLSerializer();
var source = serializer.serializeToString(document);