JS API 参考
qzjs 提供一组 WinterTC 兼容的 JS API。下面列出的全局对象在任何跑在运行时里的 JS 中都能直接用(initial_script、消息处理器、qz_post_message 触发的代码),不用 require() 或 import。
架构
API 分类
API 按来源标准分三类。
WinterTC(WinterCG 标准)
qzjs 实现的 WinterCG 兼容 Web API 子集。
| API | 全局对象 |
|---|---|
| console | console |
| performance | performance |
| timers | setTimeout、setInterval、clearTimeout、clearInterval |
| EventTarget | EventTarget、Event、CustomEvent、ErrorEvent |
| AbortController | AbortController、AbortSignal、DOMException |
| URL | URL、URLSearchParams、URLPattern |
| fetch | fetch、Headers、Request、Response |
| crypto | crypto、crypto.subtle |
| streams | ReadableStream、WritableStream、TransformStream |
| compress | CompressionStream、DecompressionStream |
| TextEncoder | TextEncoder、TextDecoder |
| Blob / File / FormData | Blob、File、FormData |
| structuredClone | structuredClone |
| MessageChannel | MessageChannel、MessagePort |
| Worker | Worker |
| navigator | navigator |
W3C API
WinterCG 核心之外的浏览器标准 API。
| API | 全局对象 |
|---|---|
| WebSocket | WebSocket |
| BroadcastChannel | BroadcastChannel |
| EventSource | EventSource |
| CacheStorage | caches、CacheStorage、Cache |
| Service Worker | navigator.serviceWorker |
| localStorage | localStorage、sessionStorage |
qzjs 平台扩展(类 Node 风格)
qzjs 特有的 API,不属于任何 Web 标准。风格接近 Node.js,但不是 Node API (process、require、Buffer 缺席)。
| API | 全局对象 | 备注 |
|---|---|---|
| fs | qzjs.fs | 文件系统操作 |
| storage | qzjs.storage | 键值存储 |
| serve | serve() | HTTP / WebSocket / gRPC 服务器 |
| grpc | grpc | gRPC 客户端 + 服务端(QZ_WITH_GRPC=ON) |
标准合规性
qzjs 目标是 WinterTC 兼容性 — 与 Cloudflare Workers、Deno 和其他服务端运行时使用的 Web API 子集相同。DOM 专用 API(document、window、HTMLElement)被有意排除。
不包含的内容
以下浏览器 API 被明确排除:
- DOM:
document、window、HTMLElement、全局对象上的addEventListener - CSS:
CSSStyleSheet、getComputedStyle、CSSOM - 布局:
requestAnimationFrame、IntersectionObserver、ResizeObserver - 媒体:
WebRTC、AudioContext - 存储:
indexedDB(用qzjs.storage)
使用方式
所有全局对象立即可用 — 无需导入:
js
// 核心 API
console.log('Hello from qzjs');
setTimeout(() => console.log('tick'), 1000);
// 带流式传输的 fetch
let response = await fetch('https://example.com/data.json');
let data = await response.json();
// crypto
let bytes = crypto.getRandomValues(new Uint8Array(32));
let hash = await crypto.subtle.digest('SHA-256', new TextEncoder().encode('hello'));
// URL 解析
let url = new URL('https://example.com/path?key=value');
console.log(url.searchParams.get('key')); // "value"
// 文件系统(平台扩展)
let content = await qzjs.fs.read('/app/config.json');
// 存储(平台扩展)
await qzjs.storage.set('session_token', 'abc123');