问题标签 [revokeobjecturl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
691 浏览

html - revokeObjectURL 的最佳实践是什么,是否真的有必要?

我正在为网站编写高级图片上传功能。为了允许在浪费时间和客户端和服务器资源将图像上传到服务器之前执行所有图像配置,我尝试使用 HTML 5 功能来支持在所有图像裁剪后批量上传的完全客户端功能集并进行了其他编辑。

我的页面上有一个放置区域,允许多个文件拖放以实际选择要编辑的图像。在放置时,我创建了一个图像编辑器列表(使用window.URL.createObjectURL),其中包含一些表单字段、简单的元数据提取预览,并将 Jcrop 附加到每个图像。我遇到的问题是当我附加 Jcrop 时。尽管我在通过调用 撤销 url 之前附加了裁剪window.URL.revokeObjectURL工具,但 Jcrop 似乎直到为时已晚才尝试访问该 URL,我最终会丢失图像。

我已经采取了根本不调用 revokeObjectURL 的方法,这可以让一切正常工作......但是我不确定不撤销对资源使用的影响。这是否允许内存泄漏的可能性?刷新页面是否会导致释放未撤销的对象 URL 并回收它们的资源?

0 投票
1 回答
875 浏览

javascript - 知道何时下载 ObjectUrl 的方法(撤销它......)

一旦用户下载了我的 Blob,我想删除它们:

我可以在不使用虚拟计时器的情况下做到这一点吗?

0 投票
1 回答
3771 浏览

javascript - 如何仅在 URL 加载后调用 revokeObjectURL?

我有一个网络应用程序。它在 Google Chrome 中运行,不需要在任何其他浏览器中运行。

我有在服务器上生成并在 AJAX 请求中发送回客户端的 PDF 数据。我从 PDF 数据创建了一个 blob。我使用 window.URL.createObjectURL 从 blob 创建一个 URL,然后将其加载到以前创建的用于显示 PDF 的窗口(我的 preview_window)中。

为了加载 URL,我设置了 preview_window.location.href。

我想调用 revokeObjectURL 以避免在窗口中生成和预览新 PDF 时浪费越来越多的资源。问题是在设置 preview_window.location.href 后立即调用它为时过早,并阻止 PDF 显示。因此,我想仅在加载 URL 后调用 revokeObjectURL。为此,我尝试将 preview_window.onload 设置为回调,但它永远不会被调用。

我想知道:

  1. 当窗口加载 URL 时是否可以触发回调,就像我试图做的那样?如何?
  2. 是否有另一种方法可以确保及时调用 revokeObjectURL?

如果在窗口完成加载 URL 时我无法触发 revokeObjectURL,我可以在生成新 URL 之前立即撤消每个 URL。但如果可能的话,我宁愿在加载完成后立即撤销 URL。

我准备了一个 html 文件,它很好地展示了这种情况:

虽然我上面的演示代码避免了它,但我确实为我的应用程序加载了 jQuery,所以如果这让事情变得更容易,我愿意使用它。

我确实在搜索中找到了这个问题,但是在那种情况下,主窗口(“窗口”)指向一个新的 URL,并且当在评论中询问窗口是否来自窗口时,OP 从来没有得到回应。 。打开。

0 投票
0 回答
46 浏览

android - Slingshot 延迟补偿会创建 Blob,使应用程序大小稳定增长。revokeObjectURL 似乎对它们不起作用

编辑:

所以我发现了真正的问题在哪里。似乎真正的问题是通过Slingshot 的延迟补偿来创建 blob 。因为当我排除延迟补偿时,文件大小不会增长

..创建一个 Blob URL。使用后,我在该 url 上尝试了各种“revoceObjectURL”:

我将每个方法调用 2 次以查看它是否成功,因为我怀疑网络错误 我既没有收到网络错误,也没有文件大小缩小到它的初始值。

0 投票
1 回答
1172 浏览

javascript - JavaScript 为什么 window.URL.createObjectURL 需要被撤销?

如果我取消注释 imgElement.src 行,我知道 img 元素会“挂钩”内存中的 blob 对象。但是,如果我们按原样运行该函数(没有这一行),我看不出bloburl不能被 GCed 的原因?因为我们在函数之后没有引用它。

0 投票
0 回答
606 浏览

javascript - 如何将 Youtube blob:videourl 转换为 Javascript 中的实际源 URL?

在观看任何 Youtube 视频时,如果检查了视频元素(在 Chrome devtools 中),则src显示视频标签的属性blob:https://youtube.com/somerandomhash而不是实际的源 URL。

我可以以某种方式检索 Javascript(或 jQuery)中视频的实际源 URL,以便它可以在隔离选项卡中播放(我认为这是 HTML5 视频播放器的默认行为)?

谢谢。

0 投票
1 回答
43 浏览

oauth-2.0 - 用户已通过 OAuth2 在 Office365 中共享访问他的个人帐户。如何以编程方式撤销共享访问?

我可以通过 OAuth2 管理用户对其个人Office365 帐户的共享访问权限。本文不包含如何撤销访问权限的信息。我相信应该有 REST API 来撤销共享访问。


我可以在哪里找到相应文档的 Office365 开发人员 API 的帮助或遗漏链接吗?

0 投票
1 回答
434 浏览

javascript - 检查 URL 是否是 createObjectURL 调用结果的正确方法?

我有一种情况,用户将图像设置为 URL 或转换为 blob 对象 URL 的字节。我的理解是,为了防止资源泄漏,我应该在 blob 对象 URL 更改时释放它们,但我不确定我是否正确检查了旧 URL 的类型。目前,我这样做的方式是检查 url 是否以'blob:'. 这是一个玩具示例函数,它证明它确实似乎有效:

这是正确的方法吗?有更好的方法吗?

我会注意到我已经尝试调用不是URL.revokeObjectURL对象 URL的字符串并且它似乎工作正常,所以我也不清楚我正确确定是否需要释放 URL 有多重要。

注意:这是一个 TypeScript 脚本,但我认为这个问题在 Javascript 中同样有效,所以我已经标记了两者。

0 投票
1 回答
5093 浏览

javascript - 在将文件写入客户端磁盘时从 blob 创建/对象 URL 释放内存

更新

由于在代码中发现错误后提出了以下问题并得出了一个更基本的问题,因此我发现了更多信息,例如在 MDN Web 文档中的下载 API 方法 downloads.download() 它声明对象的撤销url 应仅文件/url 下载后执行。因此,我花了一些时间试图了解 Web 扩展是否使下载 API onChanged 事件对网页的 javascript“可用”,但我认为它不会。我不明白为什么下载 API 仅可用于扩展,尤其是当有很多关于同一内存使用/对象 URL 撤销问题的问题时。例如,等待用户完成 Javascript 中的 blob 下载

如果你知道,请解释一下好吗?谢谢你。


从关闭 Firefox 浏览器开始,然后右键单击要在 Firefox 中打开的本地 html 文件,它会打开五个 firefox.exe 进程,如在 Windows 任务管理器中所见。其中四个进程的内存在 20,000k 到 25,000k 之间,一个进程的内存约为 115,000k。

这个 html 页面有一个 indexedDB 数据库,其中包含 50 个对象存储,每个存储包含 50 个对象。每个对象都从其对象存储中提取并使用 JSON.stringify 转换为字符串,然后写入二维数组。之后,将数组的所有元素连接成一个大字符串,转换为 blob 并通过 URL 对象写入硬盘,然后立即撤销。最终文件约为 190MB。

如果代码在转换为 blob 之前停止,则其中一个 firefox.exe 进程的内存使用量会增加到大约 425,000k,然后在数组的元素连接成单个字符串。

如果代码运行完成,同一个 firefox.exe 进程的内存使用量增长到大约 1,000,000k,然后下降到大约 225,000k。以 115,000k 开始的 firefox.exe 进程也在代码的 blob 阶段增加到大约 325,000k,并且从未减少。

将 blob 作为文本文件写入磁盘后,这两个 firefox.exe 进程永远不会释放大约 2 x 200,000k 的内存增量。

我已将每个函数中使用的每个变量都设置为 null,除非刷新页面,否则永远不会释放内存。另外,这个过程是由一个按钮点击事件发起的;如果它在没有中间刷新的情况下再次运行,这两个 firefox.exe 进程中的每一个都会在每次运行时额外获取 200,000k 内存。

我一直无法弄清楚如何释放内存?

这两个功能非常简单。json[i][j] 保存数据库中第 i 个对象存储中第 j 个对象的字符串版本。os_data[] 是一个小对象数组 { "name" : objectStoreName, "count" : n },其中 n 是存储中的对象数。如果未调用 write_to_disk,则 build_text 函数似乎会释放内存。因此,问题似乎与 blob 或 url 有关。

我可能忽略了一些明显的东西。感谢您提供的任何方向。

编辑:

我从JavaScript: Create and save file看到我在 revokeObjectURL(blob) 语句中有一个错误。它不能撤销 blob,需要将 createObjectURL(blob) 保存到 url 之类的变量中,然后撤销 url,而不是 blob。

这在大多数情况下都有效,并且在大多数情况下,上述两个 firefox.exe 进程都会释放内存。这给我留下了一个关于撤销 url 时间的小问题。

如果撤销是允许释放内存的原因,那么只有在文件成功下载后才能撤销 url 吗?如果撤销发生在用户单击确定下载文件之前,会发生什么?假设我单击按钮从数据库中准备文件,并且在准备好后浏览器会打开下载窗口,但是我等待了一会儿,考虑文件的名称或保存位置,撤销声明不会已经运行,但浏览器仍然“保留”url,因为它将下载什么?我知道我仍然可以下载文件,但撤销仍然释放内存吗?从我对这个例子的少量实验来看,它似乎没有在这种情况下发布。

如果在文件成功或未成功下载到客户端时触发了一个事件,那不就是应该撤销 url 的时间吗?在撤销 url 之前设置几分钟的超时会更好,因为我很确定没有事件表明下载到客户端已经结束。

我可能不了解有关此的基本内容。谢谢。

0 投票
2 回答
99 浏览

jquery - 为什么 revokeObjectURL 不显示 IE 11 上的文件大小

除了在 IE 11 中,此脚本工作正常。我收到此错误:DOM7001: Ungültiges Argument “url”。Fehler beim Sperren der folgenden Blob-URL

如果我用谷歌搜索“window.URL.revokeObjectURL IE11”它应该可以工作,知道为什么不可以吗?

谢谢