相关疑难解决方法(0)

Blob createObjectURL下载在Firefox中不起作用(但在调试时有效)

我有一个奇怪的问题,下面的函数是我创建的基于我在网上发现的关于在客户端动态创建一个Blob的一个二进制数据(作为数组传递)并能够下载它.这在Chrome中非常出色,但在Firefox中没有做任何事情 - 除非我调试并逐步完成代码.是的,奇怪的是,如果我在函数内创建一个断点并逐步执行它,a.click()将调出下载窗口!

function downloadFile(filename, data) {

    var a = document.createElement('a');
    a.style = "display: none";  
    var blob = new Blob(data, {type: "application/octet-stream"});
    var url = window.URL.createObjectURL(blob);
    a.href = url;
    a.download = filename;
    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);
    window.URL.revokeObjectURL(url);    
}
Run Code Online (Sandbox Code Playgroud)

谁能帮我?这是使用Firefox 38.0.5测试的.

javascript firefox blob download

57
推荐指数
2
解决办法
5万
查看次数

chrome PDF viewer无法下载文件

这是我的情况,我有一台运行PDF生成器的服务器,当我用一些参数发出请求时,它会给我一个PDF文件,PDF不会存储在运行时生成的服务器中.

一切顺利,我可以在chrome的PDF查看器中打开PDF,但如果要下载文件,则会出现错误,如图所示. 在此输入图像描述

因为Chrome转到原始URL来请求文件,但该文件不是服务器上的静态资源.

我不知道是否有人遇到过这个问题?

pdf google-chrome pdf-viewer

8
推荐指数
1
解决办法
4024
查看次数

如何仅在下载后撤销对象 URL?

我使用以下代码在 JavaScript 中保存文件:

var a = document.createElement('a');
a.href = URL.createObjectURL(new Blob(['SOME DATA']));
a.download = 'some.dat';
a.click();
Run Code Online (Sandbox Code Playgroud)

我想在下载文件后撤销 URL(使用 URL.revokeObjectURL)。什么时候这样做是安全的?

我可以在调用后立即撤销它吗a.click()(这似乎有效,但我不确定它是否安全)?ina的点击事件监听器?有没有办法让点击事件监听器默认操作之后运行?

javascript cross-browser bloburls

6
推荐指数
2
解决办法
2421
查看次数

将文件写入客户端磁盘时从 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,然后在数组元素连接成一个数组后大约 5-10 秒内回落到 25,000k。单字符串。

如果代码运行完成,同一 firefox.exe 进程的内存使用量将增长到大约 1,000,000k,然后下降到大约 225,000k。以 115,000k 启动的 firefox.exe 进程也在代码的 blob 阶段增加到约 …

javascript memory-leaks blob revokeobjecturl

3
推荐指数
1
解决办法
7858
查看次数