序列化HTMLDocument然后在服务器中呈现它?

时间:2010-01-09 06:33:37

标签: javascript html

经过一些谷歌搜索,我没有发现任何满足我需求的东西。我想保存当前的网页,就像它是什么。我的意思是,许多网页都执行了Javascript并且改变了CSS,因此在一些用户交互之后,网页可能与首次加载到浏览器中的网页不同。我想将当前的网页状态保存到服务器并在服务器中呈现它。这个任务有没有Javascript库?谢谢!

4 个答案:

答案 0 :(得分:2)

序列化完整的网页非常简单:

var serialized = document.body.innerHTML;

如果你真的需要完整的文件,包括头部,那么:

var serialized =
    '<head>' +
        document.getElementsByTagName('head')[0].innerHTML +
    '</head><body>' +
        document.body.innerHTML +
    '</body>';

现在您需要做的就是通过AJAX提交。

关于服务器端渲染,它取决于渲染的含义。我目前正在使用wkhtmltopdf在我的网站上实现“另存为pdf”功能。它使用webKit在生成PDF之前呈现HTML,因此它完全支持CSS和javascript。

如果您需要将其保存为图像而不是PDF文件,则可以始终使用ghostscript 打印将PDF格式化为JPG / PNG文件。

答案 1 :(得分:2)

更简单:

var serialized = document.documentElement.innerHTML

outerHTML而不是innerHTML会更好,但它在Firefox中不起作用。

让我们测试一下。

>>> document.body.style.color = 'red';
>>> document.documentElement.innerHTML
...
<body style="color: red;">
...

答案 2 :(得分:1)

我正在开发一些非常相似的东西,并希望与IE8,FF3.6和CHROME 5.0中的innerHTML分享我所注意到的内容摘要

IE

  • 从许多元素属性
  • 中删除引号
  • 单身节点不是自我关闭的
  • 如果元素上的值在加载HTML后发生更改,则会获取新值

FF,CHROME

  • 单身节点不是自我关闭的
  • 如果元素上的值发生变化 加载HTML后,它 不会拿起新值。它只会在初始渲染时获取HTML中设置的默认值。

答案 3 :(得分:0)

this post提到 serialiseWithStyles()函数,该函数计算每个元素的样式,并以内联方式打印样式。这消除了对单独样式表的需求。

然后将其提交给服务器,发送一个帖子请求。使用ajax或普通表格。