【问题标题】:How to change the automatically populated file name in the browser's Save As dialog?如何在浏览器的另存为对话框中更改自动填充的文件名?
【发布时间】:2013-02-21 19:58:04
【问题描述】:

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

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

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

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

如何利用浏览器或自己编写?

谢谢!

编辑

当点击另存为并立即更改标题时,是否有通知事件?

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

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

【问题讨论】:

  • 听起来你需要用正确的值更新标题属性?
  • 完全不确定,但您可以在保存前更改标题。无论如何 +1。
  • 我对火狐扩展开发不太了解,但我觉得你可以写一个扩展来改变页面标题或者保存前的默认文件名。
  • @gdoron:然后我可以使用预填充的文件名实现我自己的另存为对话框吗?
  • @epascarello:是的,但是怎么做?这一切都必须一键完成,并准备好使用不同的文件名,每次另存为.....所以我需要的是,只要他们打开另存为对话框,标题就会更改,我可以查找该事件吗??

标签: javascript jquery html firefox web


【解决方案1】:

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

【讨论】:

  • 我同意它不可编写脚本,但我想这本身与操作系统创建的“另存为”对话框无关,我觉得。默认文件名由浏览器设置。
  • 是的,它会调用文件对话框并传递名称,但 JavaScript 本身不能这样做。
  • 有一个 HTMl5 技巧用于保存 Canvas 元素的内容。您也许可以获取您的 HTML 并执行相同的操作。见:stackoverflow.com/questions/15063002/…
  • 您需要将 mime 类型设置为 text/html。试一试。
【解决方案2】:

尝试使用新的 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);

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-04-01
      • 1970-01-01
      • 2013-11-25
      • 1970-01-01
      • 2012-03-03
      • 2013-04-04
      • 2017-08-15
      • 2012-04-17
      • 1970-01-01
      相关资源
      最近更新 更多