保存javascript生成的文档

Osc*_*Ryz 12 javascript document server-side client-side html-generation

Javascript可以操纵浏览器显示的文档,因此以下内容:

<script>
    document.write("<table><tr><td>Hola</td><td>Adios</td></tr></table>");
</script>
Run Code Online (Sandbox Code Playgroud)

将使浏览器显示一个表,就像它是原始HTML文档一样:

<table>
    <tr>
        <td>Hola</td>
        <td>Adios</td>
    </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

有没有办法保存/提供此文档内容?

目前我们使用Ext-js生成一些很好的报告,我想做的是拥有它的"text/html"版本(我的意思是,不需要javascript的东西)

因此,在页面的最后,我将添加一个按钮:"另存为blaba",文档应显示文本/纯文本版本.

我现在能想到的唯一方法是将内容写入javascript变量,如:

 var content = document.toString(); // or something magic like that.
 // post it to the server
Run Code Online (Sandbox Code Playgroud)

然后将该值发布到服务器,并让服务器显示该值.

 <%=request.getParameter("content-text")%>
Run Code Online (Sandbox Code Playgroud)

但看起来很棘手.

还有其他选择吗?

编辑

好的,我几乎得到了它.现在我只需要弹出新窗口,这样选项"你想保存它吗"

这是我到目前为止所得到的

<script>
    document.write("<div id='content'><table><tr><td>Hola</td><td>Adios</td></tr></table></div>");
    function saveAs(){
        var sMarkup =  document.getElementById('content').innerHTML; 
        var oNewDoc = document.open('application/vnd.ms-excel');        
        oNewDoc.write( sMarkup + "<hr>" );
        oNewDoc.close();
    }
</script>

<input type="button" value="Save as" onClick="saveAs()"/>
Run Code Online (Sandbox Code Playgroud)

这条线:

    var oNewDoc = document.open('application/vnd.ms-excel');        
Run Code Online (Sandbox Code Playgroud)

应指定新的内容类型,但它将被忽略.

Est*_*ber 7

除非将其保存在客户端,否则File -> Save Page As...您必须完全按照提议进行操作,发布$('body').html()到服务器并将其作为文本处理.


小智 4

这是以 .xls 格式打开表格内容的升级版本。

<head>
<script>

         document.write("<table id='targetTable'><tr><td>Hola</td><td>Adios</td></tr><tr><td>eins</td><td>zwei</td></table>"); 
        function saveAsXLS()
        {
            var xlObj = new ActiveXObject("Excel.Application");
            var xlBook = xlObj.Workbooks.Add();
            var xlSheet = xlBook.Worksheets(1);
            for (var y=0;y<targetTable.rows.length;y++) // targetTable=id of the table
            {
                for (var x=0;x<targetTable.rows(y).cells.length;x++)
                {
                    xlSheet.Cells(y+1,x+1)=targetTable.rows(y).cells(x).innerText;
                }
            }   
            xlObj.Visible=true;
            document.write("The table contents are opened in a new Excel sheet.");//Print on webpage 
        }
</script>
</head>
<body>  
<input type="button" value="Open table in Excel!" onclick="saveAsXLS()"/> 
</body>
Run Code Online (Sandbox Code Playgroud)

此代码在 IE6 中进行了测试,并使用 ActiveXObject 控件。

  • 我在这里使用的表格大小为 2x2,各个内容分别映射到 Excel 工作表中。
  • 与 .doc 版本不同,这不会将文件保存在客户端系统中。它打开包含表格内容的应用程序,客户端必须保存它。

希望这有助于回答您的问题。让我知道您是否遇到任何问题。

和平。