如何在 webkit 浏览器中访问粘贴的文件? (如谷歌浏览器)

2024-04-13

如果能够在 Stack Exchange 上粘贴图像而不是干扰文件对话框,那将非常方便。类似的功能在这里实现了(是?),但是仅适用于 Webkit 浏览器 https://meta.stackexchange.com/a/233874/209994.

我正在开发执行此操作的用户脚本 https://stackapps.com/q/4999/28478。有趣的是我从未获得过file https://developer.mozilla.org/en/docs/Web/API/File(与原始图像数据不同)在 Webkit 浏览器中来自剪贴板,而在 Firefox 中则有效。

火狐解决方案:

  div.addEventListener('paste', function(event){
    //I'm actually not sure what should event.originalEvent be. I copypasted this
    var items = (event.clipboardData || event.originalEvent.clipboardData);
    console.log("paste", items);
    //Try to get a file and handle it as Blob/File
    var files = items.items || items.files;
    if(files.length>0) {  
      //Being lazy I just pick first file
      var file = files[0];
      //handle the File object
      _this.processFile(file);

      event.preventDefault();
      event.cancelBubble = true;
      return false;
    }
  });

在 Chrome 没有像 Firefox 那样好的文档(我指的是 MDN)之前,我尝试检查正在发生的事情。我复制了一个文件并将其粘贴到 Google chrome (v39) 中。这就是我在DataTransfer控制台中的对象:

作为参考,这是 Firefox 中的同一事件:

另外两个数组,items and typesFirefox 实现中不存在。当我复制文本或原始图像数据时,Chrome 将其表示为DataTransferItem。我发现最好忽略这些:

  //Being lazy I just pick first file
  var file = files[0];
  //GOOGLE CHROME
  if(file.getAsFile) {
    console.log("DataTransferItem:", file);
    //HTML or text will be handled by contenteditable div
    if(file.type!="text/plain" && file.type!="text/html") {
      //handle the File object
      _this.processFile(file.getAsFile());
    }
  }
  else 
    ...

到目前为止,除了text/plain or text/html。对于这些,.getAsFile回报null.

我发现 google chrome 模型有点令人困惑。它为您提供了有关原始数据(文本/原始图像)的更多信息,这些信息只能使用内容可编辑的 div 进行访问,但对我来说不是很清楚。


我们的魔法酱就是:

$('body').bind('paste', handlepaste);

Where handlepaste与你的非常相似,所以对于 Chrome 来说应该适合你。

不幸的是,上面的方法对于 FF 来说完全失败了,我们不愿意添加一个contenteditable任何地方(特别是考虑到它has保持焦点以使其发挥作用,并且我们不想抢走焦点)。

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

如何在 webkit 浏览器中访问粘贴的文件? (如谷歌浏览器) 的相关文章

随机推荐

  • 使用 pip 安装后找不到 cookiecutter 命令

    我想使用 cookiecutter 启动 django 项目 但由于某种原因找不到 cookiecutter 我所做的是 pip install cookiecutter 在那之后 cookiecutter https github com
  • C++ 支持编译时计数器吗?

    出于自省的目的 有时我想自动将序列号分配给类型或类似的东西 不幸的是 模板元编程本质上是一种函数式语言 因此缺乏实现此类计数器的全局变量或可修改状态 或者确实如此 根据请求的示例代码 include
  • 进度条的可见性

    当用户在一项活动中单击按钮时 我需要处理一些数据 因此屏幕看起来应用程序停止了 2 3 秒 这不是很多 但我想向用户提供一切正常的信息 IMO 最好的方法是进度条 仅在处理数据时才可见 我找到了ProgressBar的代码 它看起来像这样
  • 如何更改类内的变量?在Python中

    我已经开始编写一个空闲游戏的代码 但稍后我会添加某种类型的输入 我的问题是我的class库存不增加int s from def砍 我的到我的variable SP wood SP stone 它只是替换variable与它得到的号码def砍
  • 从 F# 调用 C# 异步方法会导致死锁

    我有一组 F 脚本 它们调用我们创建的各种库 其中许多库公开了最初用 C 编写的异步方法 最近我发现脚本停止工作了 我想距离我上次使用它们已经有半年了 当时它们还可以工作 我试图隔离问题并提出了以下代码来重现它 首先 我们考虑一个包含以下
  • 如何在 Pandas 数据框的多列上运行 Ta-Lib?

    我有一个数据框 其中包含多种证券的价格作为列 但我找不到一次性运行 TA Lib 的解决方案 因为它需要 numpy ndarray 如何在多种证券上运行 TA Lib 并获得数据帧作为回报 import talib as ta d sec
  • 缓存 VS 会话 VS cookie?

    缓存 会话 Cookie 的注意事项是什么 例如 我经常使用会话变量 有时当用户开始订购产品然后去吃午餐并在几个小时后回来并继续预订时 预订应用程序中有时会出现问题 我将预订存储在会话中 直到用户确认或中止预订 因此当用户只需单击浏览器中的
  • 使用单选按钮 PHP SQL 过滤搜索

    我有一个有效的搜索列表 搜索的工作原理是查找搜索词是否如姓名 家庭和工作 现在我想把这个搜索分开 我的意思是 创建三个单选按钮 单击第一个按钮按姓名搜索 单击第二个按钮按家庭搜索 单击第三个按钮按工作搜索 所以我的基本代码在这里 这里需要添
  • 使用 JSON.NET 作为 ASP.NET MVC 3 中的默认 JSON 序列化器 - 可能吗?

    是否可以使用JSON NET http json codeplex com 作为 ASP NET MVC 3 中的默认 JSON 序列化器 根据我的研究 似乎实现这一目标的唯一方法是扩展操作结果 http james newtonking
  • 如何更改 Laravel 中的日期语言?

    我想将我看到的日期的语言从英语更改为法语 strftime d B Y H M strtotime article gt created at 我们可以使用另一种方法与translatedFormat Carbon setLocale fr
  • Selenium WebDriver 拖放到滚动条

    我对 Selenium WebDriver 拖放有疑问 它不想拖放到滚动条中的 webelement 我试过这个 new Actions SeleniumDriver getDriver dragAndDrop element target
  • DB2 SQLCODE=-805,SQLSTATE=51002,SQLERRMC=NULLID.SYSLH203 0X5359534C564C3031

    我收到以下错误 com ibm db2 jcc am SqlException DB2 SQL Error SQLCODE 805 SQLSTATE 51002 SQLERRMC NULLID SYSLH203 0X5359534C564C
  • Angular 4打字稿解析响应对象中的枚举接口属性

    我收到来自 API 的响应 它返回一个枚举值 从 API 返回的值在请求中表示为字符串 这个值是一个enumTypescript 接口的属性 Problem 当收到响应时 TS接口将该值存储为字符串 可能这就是问题 所以我不能直接使用它en
  • 在 Hibernate 中禁用延迟加载

    如何在 Hibernate 中禁用延迟加载 我使用的是持久性注释 而不是 hbm xml 文件 我正在按 ID 获取单个对象 并希望加载所有属性 在我使用该对象之前会话已关闭 Thanks 您需要使用 FetchType EAGER 注释您
  • java中将十进制转换为格雷码

    最近出现一个问题是 编写算法将十进制数转换为n位格雷码 例如 使用 1 位 最简单 0 gt 0 1 gt 1 使用 2 位 0 gt 00 1 gt 01 2 gt 11 3 gt 10 使用 3 位 0 gt 000 1 gt 001
  • 如何使用 if/else 语句更改全局变量

    我有这个代码我想改变var n如果var thisRoll is not green 但我只得到undefined在输出中console log n var thisRoll red var n var base bet 1 functio
  • 带 margin-left 和 width:100% 右侧溢出的 Div

    我有 2 个嵌套的 div 宽度应为 100 不幸的是 带有文本框的内部 div 溢出 并且实际上比外部 div 更大 它有一个左边距 并且溢出了大约该边距的大小 我该如何解决这个问题 div style width 100 div sty
  • 使用 ctypes 从 python 调用 C 函数

    我有以下 C 代码 我正在尝试使用Python从Python调用这个函数ctypes int add int arr printf number d n arr 0 arr 0 1 return arr 0 我用以下方法编译了这个 gcc
  • 动态包含/排除 Gitlab Pipeline 中的作业

    我有一个有几个阶段的管道 detect test build deploy The detect阶段检测应用程序的类型和test and build阶段的作业根据计算结果包含或排除detect The detectstage 将其值写入名为
  • 如何在 webkit 浏览器中访问粘贴的文件? (如谷歌浏览器)

    如果能够在 Stack Exchange 上粘贴图像而不是干扰文件对话框 那将非常方便 类似的功能在这里实现了 是 但是仅适用于 Webkit 浏览器 https meta stackexchange com a 233874 209994