3

我为我的游戏制作了一个地图编辑器,代码生成到一个 id 为“code”的 div。我想知道如何使用此代码生成 javascript 文件。显然我必须得到代码 div 的文本。var code = $("#code").text();将工作。但现在我想用这段代码生成和下载 javascript 文件。是否可以仅使用 javascript 生成/下载文件,还是必须使用 php?

我想手动选择文件夹和名称。

4

3 回答 3

0

JavaScript 无权提示文件保存。您最好的选择是将其转储到一个新窗口并将其显示给用户,如果他们选择(文件->保存),他们可以在其中保存它。否则,您需要找到一种方法将必要的信息传递给 PHP 调用,然后 PHP 可以提供它,Content-Disposition: attachment并且可以提示客户端下载文件。

此外,正如 machineghost 刚刚击败我的那样,您可以使用像 flash 这样的插件来保持它的客户端,但它仍然不是纯 JavaScript。但Downloadify确实具有该功能。

于 2012-12-28T00:11:19.890 回答
0

您的问题的简短回答是否定的。出于安全原因,浏览器非常小心,不允许 Javascript 对文件系统做任何事情。

然而,Flash 没有这样的限制;查看:https ://github.com/dcneiner/Downloadify 。当然,Flash 有其自身的问题,例如移动浏览器往往不支持它(但由于您的用例是下载文件,而移动用户可能不会这样做,这可能不是问题你)。

除了 Downloadify(或类似的基于 Flash 的解决方案)之外,您唯一的选择是 Java 小程序(您不想走那条路)、浏览器插件或某种服务器参与(例如 @Brad Christie描述)。

于 2012-12-28T00:11:31.873 回答
0

尽管您对建议文件名和文件扩展名的控制能力较差,但您可以做到这一点。

我不会将它用于生产网站,但它似乎有效。

function promptSave(data) {
    /*@cc_on @*/
    /*@if (@_jscript_version >= 4)
        //ie code here
        var iframe = document.createElement("iframe");
        document.body.appendChild(iframe);
        var doc = iframe.contentWindow.document;
        doc.write(data);
        doc.execCommand('SaveAs', '', 'somefilename.txt');//only certain file extensions allowed
        document.body.removeChild(iframe);
        @else @*/
        // non ie code
        window.location = 'data:application/octet-stream;base64,' + window.btoa(data);
    /*@end @*/
}
var data = 'var jsFoo = {k:55};';
promptSave(data);

演示

Firefox 坚持将其保存为.part文件。

于 2012-12-28T01:54:59.737 回答