目前,我正在使用这个代码:
<?php
header('Content-type: application/force-download');
header('Content-Disposition: attachment; filename="'.$_POST['savename'].'.bob"');
echo($_POST['savedata'])
?>
它获取表单的数据,创建附件并将其发送回来。这是无用的,因为客户端拥有数据。我想把它重写为:
myForm.onsubmit = SomeSaveToFileFunction()
Chrome现在可以这样做了
html
<textarea></textarea><button>save</button>
Javascript document.getElementsByTagName('button')[0].onclick = function(){
var a = document.createElement('a');
a.href = 'data:text/plain;base64,'+
btoa(document.getElementsByTagName('textarea')[0].value);
a.textContent = 'download';
a.download = 'text.txt';
a.click();
}
演示http://jsfiddle.net/88BYB/3/编辑最新版本的chrome不接受下载属性(chrome35)
流量可能毫无用处。你是对的。但就像Pointy说的,不幸的是,仅仅使用javascript是没有办法的。
如果你只是想让你的下载以一种更优雅的方式实现(比页面重新加载),使用一个"隐藏的"iframe,它加载php响应。也许你可以很容易地切换PHP处理从POST到GET和…
myForm.onsubmit = function(formValueSavename, formValueSavedata) {
// phpIframeRef addresses you hidden iframe
phpIframeRef.loaction.href = 'sendData.php?savename=' + formValueSavename + '&savedata=' + formValueSavedata;
}
你可能需要一些代码来抑制你对表单的默认处理…
JavaScript不能直接在本地计算机上编写文件,这显然是出于安全原因。然而,你可能能够做你需要使用ActiveX对象,但再一次,它将只与IE工作。然后你需要像NPAPI这样的对等物来使其与Chrome兼容。
我想你应该保持你实际做的方式,如果它像你想要的那样工作。
编辑:我指的是NPAPI而不是"API"。它允许您构建与ActiveX工作方式(有点)相同的插件,并允许您做相同的事情。