Javascript 如何使动态或生成的HTML页面可保存?

Javascript 如何使动态或生成的HTML页面可保存?,javascript,html,jsp,dynamic,dojo,Javascript,Html,Jsp,Dynamic,Dojo,我对dojo、javascript和HTML编码还是有点陌生。我继承了一个HTML页面的所有权,该页面使用Dojo1.4.2(将来将升级)和javascript进行编码。从本质上讲,HTML页面包含一个最初向用户显示的表单。用户填写并提交表单后,表单将替换为基于其答案生成的内容 这是通过使用表单中的答案来显示或隐藏HTML文件中已经包含的各种div元素来实现的。因此,表单被隐藏,其他div元素的一些子集被显示 我们希望用户能够将生成的页面保存为静态HTML页面。因此,本质上我们只想将显示的div

我对dojo、javascript和HTML编码还是有点陌生。我继承了一个HTML页面的所有权,该页面使用Dojo1.4.2(将来将升级)和javascript进行编码。从本质上讲,HTML页面包含一个最初向用户显示的表单。用户填写并提交表单后,表单将替换为基于其答案生成的内容

这是通过使用表单中的答案来显示或隐藏HTML文件中已经包含的各种div元素来实现的。因此,表单被隐藏,其他div元素的一些子集被显示

我们希望用户能够将生成的页面保存为静态HTML页面。因此,本质上我们只想将显示的div保存到文件中,而不是整个页面。目前,保存只保存一个本地副本,这需要用户在每个视图上重新提交表单

我被告知,这可以通过将数据传递给服务(可能是JSP)来完成,该服务将处理这些数据并传递回浏览器。然而,我对此并不熟悉,也没有找到任何例子。有没有办法做到这一点?有没有人有任何例子或文档可以向我指出

理想情况下,我希望插入一个save按钮,该按钮保存在浏览器中查看的生成内容,而不实际创建将留在服务器上的静态HTML


提前感谢。

您可以引入一种机制,根据URL参数(即解析查询字符串的内容)对页面进行更改


例如,给定包含查询部分的URL(例如。http://your.site.com/path/to/page?p1=true&p2=true)映射到p1或p2的
元素将显示;其他人不会。你可以使用flash插件下载动态创建的数据。我写了一个小脚本来完成这个任务

这是脚本的一部分

只要把这三样东西放到其他javascript文件所在的地方就行了。在头部包含
swfobject.js
bhd.js
脚本。在正文中包含一些类似这样的html:

在页面加载时,运行如下脚本:

var dlBtn = new BHD.Button({
  // id of the element to replace with this button (required)
  id:'dl_button',
  // button image
  sprite:'buttons.png'
},function(){
  // set default filename
  dlBtn.setFile('untitled.html');
  // set file contents
  dlBtn.setData('<html>' + document.documentElement.innerHTML + '</html>');
});
var dlBtn=新BHD.按钮({
//要用此按钮替换的元素id(必需)
id:'dl_按钮',
//按钮图像
精灵:'buttons.png'
},函数(){
//设置默认文件名
dlBtn.setFile('untitled.html');
//设置文件内容
dlBtn.setData(“”+document.documentElement.innerHTML+“”);
});
您的“buttons.png”需要看起来像这样(一个垂直排列3个状态的精灵):


如果一切正常,单击按钮应提示用户下载页面当前状态的副本。

使用类似jQuery的工具,获取所有呈现的HTML内容非常简单:

$(document).ready(function(){   
   var rendered = $('html').html();   // store this in some variable   
});
存在的问题是,您希望保存页面,这在JavaScript中无法轻松完成,因为浏览器安全限制会阻止浏览器访问本地文件系统

如果使用ActiveX或execCommand(),Internet Explorer可能是一个例外。否则,正如GGG所指出的那样,您将不得不使用一些第三方工具/插件(如Flash)。

像这样的插件怎么样

javascript:document.location='data:text/html,'+document.all[0].innerHTML;
它的工作原理是访问当前DOM的HTML表示,然后重定向到使用HTML标记构建的新页面


使用浏览器的常规“保存”菜单项可以轻松保存新页面。请注意,相对URL将无法通过此转换,因此保存的页面可能会丢失其样式表/脚本/图像引用。

内容是否仅在表单元素(输入)中,或者您是否也在更新div/span(其他HTML元素)?表单元素最初位于HTML的顶部,但单击“提交”按钮后。显示的“生成”内容只是HTML页面底部的div/span等,通过更新样式显示出来。谢谢。因此,如果我理解正确,我可以获得渲染的内容,但问题仍然是允许用户根据浏览器进行本地保存,这可能只能通过使用其他工具/插件来解决。为了实现跨浏览器,出于安全考虑,您必须使用额外的插件(如Flash)。想象一下,如果你从谷歌列表中浏览一个站点,它能够从硬盘中写入[/read]。它可以带走你的机密信息,或者很容易传播病毒,而你只需要浏览网页。那将是有史以来最不安全的事情。谢谢。在制定一个适合我的解决方案之前,我将在本周先看一看并尝试一下。考虑到我的经验和时间框架,我不太可能走这条路,但感谢您的投入。由于使用其他工具的限制,我们最终走上了这条路。我们还将HTML页面转换为JSP,使事情变得更简单。这种组合允许我们保存一个静态副本。