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

2023-11-27

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

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

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

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


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

简单的答案是我们不能。

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

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

扩展

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

或者使用一些现有的,例如this or this- 这些是随机选择的,仅作为示例。您可能会更适合浏览附加集合。

下载属性和上下文菜单

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

您需要将图像转换为对象 URL 或数据 URI,并将其设置为 A 标签的源。

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

使用 CamanJS 的上下文菜单示例

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

由于 CamanJS 替换了原始元素,因此附加事件处理程序非常重要aftercanvas 已经取代了它们,否则处理程序将与原始元素一起消失,因为它们不再可用。

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 的问题)。这是一个替代方案小提琴链接在这种情况下。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将保存图像更改为文件默认名称? 的相关文章

  • 使用javascript以编程方式触发iOS safari中的复制菜单?

    我正在尝试实现一种用户友好的方式 将一些文本从文本输入字段复制到 iOS Safari 上的剪贴板 我知道无法在这个平台上以编程方式完成此操作 但我希望能够尽可能地指导用户体验 在 iOS Safari 上 当用户手动突出显示某些文本时 会
  • .points 不透明度/大小在三个.js 内

    我回来回答有关 points 的第二个问题 这次想知道如何将不透明度从 0 更改为 1 然后又回到距发射器的特定像素距离内 var particleCount 14 particles new THREE Geometry pMateria
  • jQuery:将文本区域滚动到给定位置

    我有一个包含很多文本的文本区域
  • AngularJS + jQuery 移动

    是否还有其他可能性来设计AngularJS以移动友好的方式应用程序CSS 我正在计划一个移动应用程序 并希望使用 AngularJS 进行逻辑和数据绑定 但我不想自己设计所有内容CSS The AngularJSFAQ说它使用jQuery
  • JQuery 菜单图标 RTL

    我正在尝试在阿拉伯语 RTL 页面中使用 jQuery 菜单 我可以将其设为 RTL 但图标应该是ui icon carat 1 w not ui icon carat 1 e 我创建jsfiddle在这里 http jsfiddle ne
  • Angular 4 Http POST 不起作用

    我希望每个人都做得很好 我最近开始使用 Angular 4 4 我一直在尝试将数据发布到我的 api 服务器 但不幸的是它不起作用 我花了大约两天的时间 但仍然没有成功 甚至已经尝试过 6 7 篇文章角 io https angular i
  • Chrome --app 相当于 Firefox\IE

    我有一个网络应用程序 客户要求单击不同按钮时更改浏览器窗口大小 我发现在那link https stackoverflow com questions 13436855 launch google chrome from the comma
  • ES6 模块范围

    我有代码 lib js var a a export var b b main js console log a a variable is not available in a global scope import b from lib
  • 如何从 html 页面 [javascript] 调用 Web 服务方法而不刷新页面

    我有一个webservice这将返回一个值 我的要求是 我需要调用它webservice从一个index html页面 该页面有一个 html 提交按钮 在该按钮上单击我正在呼叫JavaScript 从那里我想调用网络方法 我怎样才能做到这
  • 如何在html中定义条件换行符?

    我希望这根绳子断在 如果需要的话 没有地方可以写了 7 380 Ft 159 Ft term kd jjal like 7 380 000 Ft 159 125 Ft term kd jjal 如何在html中实现这一点 nbsp 产生 错
  • 从字节数组设置 img src

    我需要设置img src我在对象中拥有的字节数组的属性 img
  • 从网页运行 ClickOnce 应用程序,无需用户操作

    我们有一个基于 Java 的 Web 应用程序以及用 C 编写的相同应用程序 如果 java 检查器发现客户端计算机上没有安装 Java 则应该运行该应用程序 这个想法是运行 C 单击一次 http en wikipedia org wik
  • Firebase + Node.js:错误:找不到 XMLHttpRequest 兼容性库

    Firebase Node js On iOS 安装的 Node js npm 安装 firebase save 节点测试 js 其中 test js 是一个非常简单的连接到 Firebase 的脚本 var firebase requir
  • 禁用复选框上的输入

    需要在取消选中该复选框时禁用输入 并在选中该复选框时启用它 我的代码是这样的 div class y div
  • Google 地图 API - 地图未显示 - 没有错误

    我正在尝试将地图从 Google API 加载到 div 中 但是 地图未加载 并且没有输出任何错误 这是代码 google maps var geocoder map function codeAddress address geocod
  • 使用flex-basis控制行上显示的项目数

    我想在使用 Flex 时将元素推出以隐藏它们 例如 如果flex basis为 50 仅显示两个项目弯曲到给定空间 而其他元素则在overflow hidden 领土 Or if flex basis为 25 则仅显示 4 个 Flex 元
  • 如何在 React Native 中使用相同的 Firebase 数据库在两个应用程序之间进行通信?

    我有两个不同的应用程序使用相同的实时数据库 在第一个应用程序中 我发送的订单包含一些要保存在数据库中的数据字段 在另一个应用程序中 我只添加一个侦听器 firebase database ref userOrder currentUser
  • 我应该创建一个块还是一个元素 BEM CSS?

    Bem官网说 创建一个块如果一段代码可以被重用并且它不依赖于正在实现的其他页面组件 创建一个元素如果一段代码在没有父实体 块 的情况下无法单独使用 我有一个 关于部分 块 它的元素依赖于父级并且不能在网站中重复使用 如何根据 bem 这段代
  • Three.js点击单个粒子

    In this example http jsfiddle net agqq96bq 2 您可以看到 2 个可点击的粒子 但它们都受到点击的影响 另外 我只想检测粒子上的点击 而不将它们过滤出场景 像这儿 if intersects len
  • 从 jQuery UI 对话框调用 Bootstrap 模式:超出最大调用堆栈大小

    我有一个有点奇怪的问题 我正在调用 Bootstrap Modal 同时打开了 jQuery UI 对话框并且正在获取RangeError Maximum call stack size exceeded 在控制台中 奇怪的是 只有当我在打

随机推荐

  • 在闪亮的应用程序上安排任务[重复]

    这个问题在这里已经有答案了 我正在使用shiny开发一个应用程序 作为我项目的一部分 我需要每天从网站上抓取一些数据 是否可以使用 cron 或类似实用程序安排每 12 小时完成一项工作 我正在使用免费的闪亮服务器托管服务器 我真的不建议在
  • 使用 Internet Explorer 进行重定向后获取

    我有一个网页实现了发布 重定向 获取模式以避免在简单的 CRUD 应用程序中重复发布 这里预期的请求 响应序列是 浏览器通过以下方式发送数据POST 服务器修改数据库 响应状态302 Moved Temporarily and a Loca
  • 使用 Group By 进行多个运行总计

    我正在努力寻找一种好方法来运行带有 group by 的运行总计 或者类似的方法 下面基于游标的运行总计适用于完整的表 但我想扩展它以添加 客户端 维度 因此 我将在一张表中获得如下创建的运行总计 但对于每个公司 即公司 A 公司 B 公司
  • Zend Framework 布局中的图像

    我在这里有点迷失 解决方案可能潜伏在我的鼻子底下 但我无法得到 想到你们是否有人可以提供帮助 问题是这样的 我有 Zend Framework 标准文件布局 Project application controllers views lay
  • 是否可以使用 JavaScript 读取 Firefox、Safari 和 Chrome 中的剪贴板?

    我正在尝试使用 JavaScript 读取剪贴板的内容 通过 Internet Explorer 可以使用该功能 window clipboardData getData Text 在 Firefox Safari 和 Chrome 中是否
  • 类定义之外的部分模板特化

    我可以在类声明中使用部分模板专业化 template
  • 如何使用javascript检查文件是否被选择?

    在 php 中 这是检查文件是否被选择的方法 FILES item size gt 0 那么在 JavaScript 中呢 我需要知道 因为我有一个只有在选择文件时才起作用的函数 http www w3 org TR DOM Level 2
  • 从逗号分隔的字符串中删除重复项

    是否有更好 更快 的解决方案来从逗号分隔的字符串中删除重复项 public function d dep if strpos dep false nd explode dep oa array unique nd nx count oa g
  • 使用 JDBC 连接到 SQL Server LocalDB

    是否可以使用 JDBC 连接到 SQL Server LocalDB 看起来 截至 2011 年 12 月 这是不可能的 您知道解决方法或状态更改吗 对的 这是可能的 使用 jTDS 的 LocalDB 实例的连接字符串如下所示 jdbc
  • Braintree - paymentMethodNonce 未收到调用

    我已经为 Braintree 设置了 dropin UI 我可以很好地看到用户界面 在此之前 我创建了客户 我可以在 Braintree sandbox 上看到该客户 现在我想向客户添加付款方式 我正在尝试以下代码 但 paymentMet
  • 用于验证文件夹名称和文件名的正则表达式

    我想验证文件名 文件或文件夹的名称不应包含 您能否建议我在 preg match 中使用的正则表达式 Thanks 使用该方法会更有效strpbrk 功能 if strpbrk filename lt gt FALSE filename i
  • 拆分列表并从子列表中求和?

    我正在为我的 Haskell 课程寻找解决方案 我有一个数字列表 我需要为列表的每个部分返回 SUM 部分除以 0 我需要使用 FOLDL 函数 Example 初始列表 1 2 3 0 3 4 0 5 2 1 子列表 1 2 3 3 4
  • 为什么 CROSS JOIN 条件在“ON”子句中不起作用,而仅在 WHERE 子句中起作用?

    我想知道为什么条件交叉联接必须具有 WHERE 子句中指定的条件 以及为什么它在 ON 子句中不起作用 请参阅编译示例的链接 http rextester com IKY8693 业务上下文 我需要生成开始日期和结束日期之间的日期列表 以便
  • 如何为不接受取消令牌的异步函数设置超时?

    我的网络请求是由这段代码处理的 Response await Client SendAsync Message HttpCompletionOption ResponseHeadersRead CToken 在读取响应标头之后 内容读取完成
  • 类型提示 - 指定对象数组

    如何将参数类型指定为数组 假设我有一个名为 Foo 的类 class Foo 然后我有一个接受该类类型作为参数的函数 function getFoo Foo f 当我传入一个 Foo 数组时 我收到一个错误 说 可捕获的致命错误 参数 1
  • Linux新手问题:GCC编译器输出

    我对 Linux 完全是个新手 我在笔记本电脑上安装了 Mint 最近一直在玩它 我写了一个简单的C程序并保存了文件 然后在命令行中我输入 gcc c myfile 然后弹出一个名为 a out 的文件 我天真地 在使用 Windows 多
  • 如何从 XML 反序列化抽象类的具体实现

    我有一个带有几个具体实现的抽象类 这需要序列化为 XML 才能发送到另一个系统 这工作正常 但是 我还需要能够反序列化相同的 XML 结构 无论我如何尝试 我似乎都无法做到这一点 我的班级结构如下 抽象类 XmlIncludeAttribu
  • 为什么 MAX() 比 ORDER BY ... LIMIT 1 慢 100 倍?

    我有一张桌子foo与 以及其他 20 个 列bar baz and quux索引打开baz and quux 该表有约 500k 行 为什么以下查询的速度差异如此之大 查询A需要0 3秒 而查询B需要28秒 Query A select b
  • 在 R 中读取空格分隔的数字

    我在 R 中有这个字符串 numbers lt 4 4956 1 00e 09 50 9 1 244 47 1 1 04 5 5 0 499 13 9 0 我应该将数字读入向量中 现在我可以找到其他语言的相同线程 但这里找不到 R 的线程
  • 如何将保存图像更改为文件默认名称?

    我有一个由 Caman js 创建的画布 HTML5 标签 当我在 FF 中单击右键并保存到文件时 文件的默认名称是 canvas png 由于我创建了很多文件并需要保存它们 这很不幸 因为我需要为每个文件设置不同的名称 我想要完成的是 当