cxxjackie 发表于 2022-12-13 20:42
这样啊,我没怎么用过onprogress,不太了解。stream可以用arraybuffer读吗?可以的话好像支不支持也无所 ...
重点不是stream可不可以用arraybuffer读,重要的是能不能中途读取出内容,例如下面这个网站:http://test-case.ggnb.top/stream
如果使用arraybuffer,那么只能等这个数据全部完全返回完毕后才能读取到数据,如果使用stream就可以服务器返回一点就读取出一点。
// ==UserScript==
// @name gm xhr stream
// @namespace https://bbs.tampermonkey.net.cn/
// @version 0.1.0
// @description try to take over the world!
// @author You
// @match https://bbs.tampermonkey.net.cn/
// @grant GM_xmlhttpRequest
// @connect test-case.ggnb.top
// ==/UserScript==
GM_xmlhttpRequest({
url: "http://test-case.ggnb.top/stream",
responseType: "arraybuffer",
onloadstart(ev) {
console.log('onloadstart', ev);
},
onprogress(ev) {
console.log("onprogress", ev);
},
onload(ev) {
console.log("onload", ev);
}
});
GM_xmlhttpRequest({
url: "http://test-case.ggnb.top/stream",
responseType: "stream",
onloadstart(ev) {
/**
* @type ReadableStream
*/
const stream = ev.response;
const reader = stream.getReader();
reader.read().then(function read({ done, value }) {
if (done) {
return;
}
console.log('read', new TextDecoder().decode(value));
reader.read().then(read);
})
console.log('onloadstart', ev);
},
onprogress(ev) {
console.log("onprogress", ev);
},
onload(ev) {
console.log("onload", ev);
}
});
用tm执行,脚本猫等我研究研究stream然后加入😭