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

Javascript 序列化HTMLDocument,然后在服务器中呈现它?,javascript,html,Javascript,Html,在谷歌搜索之后,我没有找到任何能满足我需求的东西。我想保存当前网页的原样。我的意思是,许多网页都执行了Javascript,CSS也发生了变化,所以在一些用户交互之后,网页可能与第一次加载到浏览器时的网页有所不同。我想将当前网页状态保存到服务器,并在服务器中呈现它。是否有用于此任务的Javascript库?谢谢 序列化一个完整的网页非常简单: var serialized = document.body.innerHTML; 如果您确实需要完整的文档,包括标题,那么: var serializ

在谷歌搜索之后,我没有找到任何能满足我需求的东西。我想保存当前网页的原样。我的意思是,许多网页都执行了Javascript,CSS也发生了变化,所以在一些用户交互之后,网页可能与第一次加载到浏览器时的网页有所不同。我想将当前网页状态保存到服务器,并在服务器中呈现它。是否有用于此任务的Javascript库?谢谢

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

var serialized = document.body.innerHTML;
如果您确实需要完整的文档,包括标题,那么:

var serialized =
    '<head>' +
        document.getElementsByTagName('head')[0].innerHTML +
    '</head><body>' +
        document.body.innerHTML +
    '</body>';
var序列化=
'' +
document.getElementsByTagName('head')[0]。innerHTML+
'' +
document.body.innerHTML+
'';
现在您需要做的就是通过AJAX提交它

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

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

更简单:

var serialized = document.documentElement.innerHTML
outerHTML
取代
innerHTML
会更好,但它在Firefox中不起作用

让我们测试一下

>>> document.body.style.color = 'red'; >>> document.documentElement.innerHTML ... <body style="color: red;"> ... >>>document.body.style.color='red'; >>>document.documentElement.innerHTML ...
我正在做一些类似的工作,我想与大家分享一下我在IE8、FF3.6和CHROME 5.0中所注意到的innerHTML

  • 从许多元素属性周围去掉引号
  • 单例节点不是自关闭的
  • 如果在加载HTML后元素上的值发生了变化,它将拾取新值

  • 单例节点不是自关闭的
  • 如果元素上的值发生更改 加载HTML后,它将 不拾取新值。它仅在初始呈现时拾取HTML中设置的默认值
提到了一个serialiseWithStyles()函数,该函数计算每个元素的样式,并以内联方式打印样式。这样就不需要单独的样式表


然后,要将其提交到服务器,请发送post请求。使用ajax或普通表单。

Ah,但是element.innerHTML是否包含元素的样式信息?添加了获取
内容的方法。但是,如果在一些用户交互之后,某些元素的样式被javascript更改了呢?这真的很烦人…然后在用户交互之后执行innerHTML。innerHTML是对浏览器HTML编译器/解析器的一种引用。它与view source.wkhtmltopdf不同,它可以将任何网页转换为PDF文件,是否有类似的工具可以将网页转换为PNG/JPG图像?我认为这个解决方案的问题还在于,当某些元素的样式被Javascript更改时,内部/外部HTML无法反映这些更改…我运行“document.body.color='red';document.documentElement.innerHTML;'在Chrome控制台中,我得到“”。您使用的是Firefox还是IE?
document.body.style.color
,而不是
document.body.color
。我的bad.textarea.value无法序列化。我认为该问题是该问题的重复。然而,这个问题的答案是好的。