3

封闭系统的要求:Firefox,仅客户端代码,HTML、CSS 和 JavaScript/Jquery,但没有其他开源库。

需要保存一个完整的网页。内置功能很好用,除了我需要动态设置文件名。

目前,内置的另存为机制使用 html 标题属性填充文件名(在另存为对话框中)。

但是,我需要每次动态填充文件名。(即 File1、File2、File3)——换句话说,我需要通过一些代码在每次保存时设置文件名。

我如何利用浏览器或自己编写它来做到这一点?

谢谢你!

编辑

当单击另存为并立即更改标题时,是否有事件注意到?

最坏的情况,我可以实现自己的另存为对话框吗?

编辑 2
我看到可以在 IE document.execCommand('SaveAs',) 中调用另存为的命令,在 FF 中是否有等价物?如果我通过java脚本打开另存为对话框,我假设我会更改标题?

4

3 回答 3

3

你不能做这个。它不可编写脚本。文件对话框是浏览器挂钩的操作系统的一部分。

于 2013-03-06T20:58:37.133 回答
0

也许在您保存文件名的数据库中使用自动增量(AI)字段可以解决问题。

  1. <filename>为您的数据库表中的文件名创建一个字段。
  2. 将其定义为Not Null (NN)和作为Auto Increment (AI)- 这将在此字段中为每个新记录提供一个值作为运行编号。
  3. 在您的 PHP 文件中,在保存之前,在 DB 表中创建一条新记录,然后将自动创建的字段拉出<filename>到一个变量 <$newname>中。
  4. 使用 PHP 保存文件,<$newname> 后跟文件扩展名。
  • 您提到这是一个封闭系统,但如果您可以设置本地 MySQL 服务器,那么这将起作用。(这也可能对那些碰巧不使用封闭系统的人有所帮助,呵呵……)
于 2021-01-20T23:22:25.140 回答
0

尝试使用新的 html5 下载属性:

<a href="http://..." donwload="someFilename">Click here</a>

如果在响应头中发送文件名,浏览器会更喜欢它。但如果不是,浏览器将使用下载属性中指定的文件名。

你甚至可以编写一个脚本来自动显示对话框:

//create a element
var a = document.createElement('a');
a.appendChild(document.createTextNode('Click here'));
a.href = 'http://some/url';
a.download = 'filename';

//Put filename in clipboard. If download filename is ignored, user can simply paste it
var aux = document.createElement('input');
aux.setAttribute('value', a.download);
document.body.appendChild(aux);
aux.select();
document.execCommand("copy");
document.body.removeChild(aux);

document.body.insertBefore(a, document.body.firstElementChild);
a.dispatchEvent(new MouseEvent('click'));
//Optionally you can remove the link as well (uncomment line bellow)
//document.body.removeChild(a);
于 2017-03-17T12:36:35.083 回答