javascript - 如何将保存图像更改为文件默认名称?

标签 javascript jquery html

我有一个由 Caman.js 创建的 Canvas HTML5 标签。

当我在 FF 中单击右键并保存到文件时,文件的默认名称是 canvas.png。由于我创建了很多文件并需要保存它们,这很不幸,因为我需要为每个文件设置不同的名称。

我想要完成的是,当保存第一个图像时,保存到文件对话框显示 firstfile.png 和第二个 secondfile.png 等等。所以我不需要在保存对话框窗口中更改名称。

如何使用 HTML 和 JS 更改 FF 中保存到文件对话框的默认名称?

最佳答案

How to change the default name of save to file dialog in FF using HTML and JS?

简单的答案是我们不能。

名称是在浏览器内部生成的,我们无法从普通网页访问 API,因此无法更改此行为。

无法直接访问默认上下文菜单的原因有多种,其中之一是安全性。

扩展

不过,一种解决方法是为浏览器编写一个插件/扩展,并提供一个自定义上下文菜单 item,然后您可以提供所需的行为。

或者使用一些现有的,比如 thisthis - 这些是随机选择的,仅作为示例。您可能能够更好地适应附加集合。

下载属性和上下文菜单

如果您正在控制要从中保存图像的页面,您还可以提供一个自定义上下文菜单,该菜单允许您使用 A 标签和 download 属性保存图像,该属性允许您设置文件名。

您需要将图像转换为 Object-URL 或 Data-URI,并将其设置为 A-tag 的源。

有些人可能出于各种原因反对使用自定义上下文菜单,但如果这是为了本地使用,则没有充分的理由说你不能,而在其他情况下,良好的 UX 方法可以告知用户这种行为,从而消除任何惊喜。

使用 CamanJS 的上下文菜单示例

添加了一个极简示例来弹出带有链接和文件名的菜单。该示例使用 toBase64() 方法使用 CamanJS。

由于 CamanJS 替换了原始元素,因此在 canvas 替换它们之后 附加事件处理程序很重要,否则处理程序将与原始元素一起消失,因为它们不再可用。

Caman(img, function() {
  var me = this;
  
  // from inside callback as img is now a different element
  img.oncontextmenu = function(e) {
    e.preventDefault();                           // prevent default action
    lnk.download = lnk.innerHTML = "Myfile.jpg";  // set file and link name
    lnk.href = me.toBase64();                     // get Data-URI from CamanJS
    menu.style.cssText =                          // show the menu
      "left:" + e.clientX + "px; top:" + e.clientY + "px; display:block";
  };
});

window.onclick = function() {menu.style.display="none"};
#menu {
  position:fixed;
  background:#444;
  padding:4px 7px;
  box-shadow:3px 3px 3px #000;
  display:none;
  }
#menu a {color:#fff;font:14px sans-serif}
<script src="http://cdnjs.cloudflare.com/ajax/libs/camanjs/4.0.0/caman.full.min.js"></script>
<img id=img src="//i.imgur.com/67E6Ujdb.jpg" crossOrigin="anonymous">
<div id="menu">
  <a id="lnk"></a>
</div>

注意:在带有 Firefox 的 Stacksnippet 中可能无法工作(似乎是 Stacksnippet 的问题)。这是一个替代方案 fiddle link 在这种情况下。

关于javascript - 如何将保存图像更改为文件默认名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37859069/

相关文章:

javascript - 将对象链接到 jquery 函数

javascript - 返回顶部按钮未正确触发

JavaScript jquery json

python - 扩展管理index.html模板

javascript - 类型错误 : module is not a function AngularJS & Jasmine

javascript - 更新总价?

javascript - 如何使用jquery扩展对象

javascript - jQuery - 是否可以将悬停转发到另一个元素?

html - 同一行的回声结果?

HTML TIDY 没有正确缩进内联标签和脚本标签