显示“另存为”对话框,并将所选文本区域中的内容保存到客户端计算机上的文件中。

5

可能是重复问题:
仅使用Javascript(无服务器端)下载文本区域内容作为文件

我有一个表单,其中在文本区域中显示一些与用户相关的信息。 如果用户想要保存信息,他/她将从文本区域复制文本,然后单击[保存]按钮,保存对话框将出现,允许用户选择适当的路径,然后将所选文本导出为文本文件

问题是我不知道如何在客户端上显示“另存为”对话框并将其写入所选路径作为文本文件(它可以使用Javascript或Jquery?)。所以我想知道是否有人能给我一些提示?

非常感谢您。


1
我认为你做不到。 - sje397
@jleedev:然而被接受的答案是服务器端的。 - bob-the-destroyer
1
@tlpd:在JavaScript中这是不可能的,除非客户端使用Windows上的IE并且他们的安全权限允许创建COM对象(默认情况下IE禁止此操作)。您可能需要扩展搜索和标记选择,包括Flash、Java小程序等。 - bob-the-destroyer
@bob-the-destroyer:因为在JS中不可能实现 :) - Valentin Rocher
@Valentin Rocher:原问题是“你能否仅使用JavaScript(非特定于浏览器)完成它”。如果您愿意,只需使用JavaScript即可擦除客户端硬盘,前提是他们的计算机中安装有IE、Windows并且已通过安全权限允许执行。Shadow Wizard提到了execCommand技术作为这个特定问题的解决方法。否则,如果要跨不同浏览器访问客户端的计算机,则必须引入除JavaScript之外的其他东西。但是,如果IE是您唯一的目标受众,并且他们信任您,请只引入ActiveXObject()即可。 - bob-the-destroyer
1个回答

13

仅适用于IE浏览器的解决方案:

function SaveContents(element) {
    if (typeof element == "string")
        element = document.getElementById(element);
    if (element) {
        if (document.execCommand) {
            var oWin = window.open("about:blank", "_blank");
            oWin.document.write(element.value);
            oWin.document.close();
            var success = oWin.document.execCommand('SaveAs', true, element.id)
            oWin.close();
            if (!success)
                alert("Sorry, your browser does not support this feature");
        }
    }
}

必要的HTML示例:

<textarea id="myText"></textarea><br />
<button type="button" onclick="SaveContents('myText');">Save</button>

这将把给定文本区域内的内容保存到以该文本区域ID命名的文件中。

对于其他浏览器,请参考此处: Does execCommand SaveAs work in Firefox?

测试用例和工作示例: http://jsfiddle.net/YhdSC/1/ (仅适用于IE..)

注意:https://support.microsoft.com/en-us/help/281119/internet-explorer-saves-html-content-instead-of-the-active-document

它可能不适用于除txt以外的文件类型。


谢谢Shadow Wizard,我已经检查过了,这种方法对我有效。 - Phu Nguyen
@tlpd 感谢您,请接受这个答案,并且请查看您以前的问题并接受解决您问题的答案。 - Shadow The Spring Wizard
我有一个客户坚持要求我的网页支持IE9浏览器。这个解决方案可行。 - oraclesoon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接