Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firefox扩展&;XUL:获取页面源代码_Javascript_Xul_Firefox Addon_Innerhtml - Fatal编程技术网

Javascript Firefox扩展&;XUL:获取页面源代码

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

我正在开发我的第一个Firefox扩展,为此我需要获得当前页面的完整源代码。如何使用XUL实现这一点?

也许您可以通过DOM使用

var source=document.getElementsByTagName(“html”)

并使用DOMParser获取源代码


看起来真的没有办法得到“所有的源代码”。你可以用

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行应该是:

&lt;<span class="start-tag">HTML</span>&gt;
在()之后,我们最终得到了预期的结果:

<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);