gpt4 book ai didi

google-chrome - 在 Google Chrome 扩展程序中强制下载

转载 作者:行者123 更新时间:2023-12-04 20:57:14 24 4
gpt4 key购买 nike

我正在编写一个 Google Chrome 扩展程序,可让您下载数据的备份文件。我希望用户能够按下按钮并打开“另存为”对话框,他们可以将文件保存到他们的计算机上。似乎没有任何效果,我还没有在互联网上找到答案。我尝试了几种方法:

  • 使用 document.execCommand('SaveAs', null, 'filename.json');这不起作用,因为此命令仅适用于 IE,并且似乎没有 Webkit 替代方案
  • 使用 数据 URI .这是最有前途的,并且在 Opera 和 Firefox 中有效,但问题是 Chrome 和 Safari 似乎都不支持 URI 中的 Content-disposition=attachment;-header。此 应该工作。 (Chrome 甚至不允许我 ctrl/cmd+s 来自数据 URI 的页面)
  • 使用 XMLHTTPRequest .我还没有尝试过这个,但是必须有某种方式可以转发请求吗?请注意,我不想使用外部服务器(在这种情况下,我可以简单地发送一个 POST 请求并应用一个 Content-disposition:-header)
  • 使用可用的 Chrome 扩展 API。但似乎没有任何用于此目的的东西。

  • 我不想使用任何外部服务器的原因是我不想为托管付费,并且发送的数据可能对用户很敏感,我不想侵犯任何人的隐私。

    有没有人让这个工作?

    最佳答案

    我在 Github 上的 Appmator 代码中按如下方式进行了操作。

    基本方法是根据需要构建 Blob(Chrome/WebKit/Firefox 在 XmlHttpRequest 上有一个 responseBlob,因此您可以使用它),创建一个 iframe(隐藏,显示:无),然后将 iframe 的 src 分配为 Blob 。

    这将启动下载并将其保存到文件系统。唯一的问题是,您还不能设置文件名。

    var savaeas = document.getElementById("saveas");
    var bb = new (window.BlobBuilder || window.WebKitBlobBuilder)();

    var output = Builder.output({"binary":true});
    var ui8a = new Uint8Array(output.length);

    for(var i = 0; i< output.length; i++) {
    ui8a[i] = output.charCodeAt(i);
    }

    bb.append(ui8a.buffer);

    var blob = bb.getBlob("application/octet-stream");
    var saveas = document.createElement("iframe");
    saveas.style.display = "none";

    if(!!window.createObjectURL == false) {
    saveas.src = window.webkitURL.createObjectURL(blob);
    }
    else {
    saveas.src = window.createObjectURL(blob);
    }

    document.body.appendChild(saveas);

    关于google-chrome - 在 Google Chrome 扩展程序中强制下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4250918/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com