gpt4 book ai didi

Safari 插件中的 Javascript - 从 XHR 下载二进制文件数据然后重新提交

转载 作者:行者123 更新时间:2023-11-29 22:30:49 26 4
gpt4 key购买 nike

我正在尝试编写一个 Safari 扩展来获取用户打开的 PDF 文档,然后通过 POST 将其提交到另一个站点。

我已经在 Chrome 中完成了这项工作,但复制相同的方法不起作用,因为 Safari 无法与 BlobBuilder 一起使用。

这是在 Chrome 中有效的方法:

    var xhr = new XMLHttpRequest();
xhr.open("GET", tab.url, true);

xhr.responseType = "arraybuffer";

xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {

var bb = new BlobBuilder();
bb.append(this.response);

var blob = bb.getBlob('application/pdf');

var http = new XMLHttpRequest();

http.open("POST", send_url, true);

var formData = new FormData();
formData.append("src", blob);
http.send(formData);
}

生成的 POST 与我的 PHP 脚本对话,其 $_FILES 数组中是我的文件。完美。

但我尝试使用 Safari 似乎绝对没有任何效果。我尝试以 responseType='blob' 开始,但这没有用。我无法获得任何 Safari JS 文件对象来处理此数据。我尝试将其更改为 Uint8 数组,但这并没有提交数据,只是字符串 "[object UInt8Array]"

有什么想法吗?

干杯!托尼

最佳答案

我将 responseType 保持为“arraybuffer”,然后将 xhr.response 传递给新 Uint8Array 的构造函数,在我的 Mac 上的 Safari 5.1.1 中工作得很好:

xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
buffer = new Uint8Array(xhr.response);
for (var loop=0; loop<buffer.length; loop++) {
// Do something with buffer[loop]
}
}
}
xhr.open('GET', 'yourfilename.here', true);
xhr.responseType = 'arraybuffer';
xhr.send();

我必须承认,在 RTFM 模式启动之前我尝试了“一两个”东西,我发现 MDN page on XMLHttpRequest有一个关于读取二进制数据的部分(MDN 是一个很好的资源)。

一旦我把它放好,一切都开始运转起来。

关于Safari 插件中的 Javascript - 从 XHR 下载二进制文件数据然后重新提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7013931/

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