mirror of
https://github.com/qaiu/netdisk-fast-download.git
synced 2026-05-27 16:57:28 +00:00
106 lines
3.4 KiB
JavaScript
106 lines
3.4 KiB
JavaScript
// // ==UserScript==
|
||
// // @name Fetch API示例解析器
|
||
// // @type fetch_demo
|
||
// // @displayName Fetch演示
|
||
// // @description 演示如何在ES5环境中使用fetch API和async/await
|
||
// // @match https?://example\.com/s/(?<KEY>\w+)
|
||
// // @author QAIU
|
||
// // @version 1.0.0
|
||
// // ==/UserScript==
|
||
|
||
// // 使用require导入类型定义(仅用于IDE类型提示)
|
||
// var types = require('./types');
|
||
// /** @typedef {types.ShareLinkInfo} ShareLinkInfo */
|
||
// /** @typedef {types.JsHttpClient} JsHttpClient */
|
||
// /** @typedef {types.JsLogger} JsLogger */
|
||
|
||
// /**
|
||
// * 演示使用fetch API的解析器
|
||
// * 注意:虽然源码中使用了ES6+语法(async/await),但在浏览器中会被编译为ES5
|
||
// *
|
||
// * @param {ShareLinkInfo} shareLinkInfo - 分享链接信息
|
||
// * @param {JsHttpClient} http - HTTP客户端(传统方式)
|
||
// * @param {JsLogger} logger - 日志对象
|
||
// * @returns {string} 下载链接
|
||
// */
|
||
// function parse(shareLinkInfo, http, logger) {
|
||
// logger.info("=== Fetch API Demo ===");
|
||
|
||
// // 方式1:使用传统的http对象(同步)
|
||
// logger.info("方式1: 使用传统http对象");
|
||
// var response1 = http.get("https://httpbin.org/get");
|
||
// logger.info("状态码: " + response1.statusCode());
|
||
|
||
// // 方式2:使用fetch API(基于Promise)
|
||
// logger.info("方式2: 使用fetch API");
|
||
|
||
// // 注意:在ES5环境中,我们需要手动处理Promise
|
||
// // 这个示例展示了如何在ES5中使用fetch
|
||
// var fetchPromise = fetch("https://httpbin.org/get");
|
||
|
||
// // 等待Promise完成(同步等待模拟)
|
||
// var result = null;
|
||
// var error = null;
|
||
|
||
// fetchPromise
|
||
// .then(function(response) {
|
||
// logger.info("Fetch响应状态: " + response.status);
|
||
// return response.text();
|
||
// })
|
||
// .then(function(text) {
|
||
// logger.info("Fetch响应内容: " + text.substring(0, 100) + "...");
|
||
// result = "https://example.com/download/demo.file";
|
||
// })
|
||
// ['catch'](function(err) {
|
||
// logger.error("Fetch失败: " + err.message);
|
||
// error = err;
|
||
// });
|
||
|
||
// // 简单的等待循环(实际场景中不推荐,这里仅作演示)
|
||
// var timeout = 5000; // 5秒超时
|
||
// var start = Date.now();
|
||
// while (result === null && error === null && (Date.now() - start) < timeout) {
|
||
// // 等待Promise完成
|
||
// java.lang.Thread.sleep(10);
|
||
// }
|
||
|
||
// if (error !== null) {
|
||
// throw error;
|
||
// }
|
||
|
||
// if (result === null) {
|
||
// throw new Error("Fetch超时");
|
||
// }
|
||
|
||
// return result;
|
||
// }
|
||
|
||
// /**
|
||
// * 演示POST请求
|
||
// */
|
||
// function demonstratePost(logger) {
|
||
// logger.info("=== 演示POST请求 ===");
|
||
|
||
// var postPromise = fetch("https://httpbin.org/post", {
|
||
// method: "POST",
|
||
// headers: {
|
||
// "Content-Type": "application/json"
|
||
// },
|
||
// body: JSON.stringify({
|
||
// key: "value",
|
||
// demo: true
|
||
// })
|
||
// });
|
||
|
||
// postPromise
|
||
// .then(function(response) {
|
||
// return response.json();
|
||
// })
|
||
// .then(function(data) {
|
||
// logger.info("POST响应: " + JSON.stringify(data));
|
||
// })
|
||
// ['catch'](function(err) {
|
||
// logger.error("POST失败: " + err.message);
|
||
// });
|
||
// }
|