Skip to content

mini-program-polyfill-core

它是一系列小程序缺失的 Web APIpolyfill 集合。你可以在任何需要它的项目中使用,并不限制于这个项目。

用法

你可以简单的让其应用在 globalThis 上:

js
import '@minisheep/mini-program-polyfill-core/wechat-polyfill'

如果你不希望污染 globalThis, 你也可以:

js
import { sharedGlobals } from '@minisheep/mini-program-polyfill-core/wechat'
// 然后使用 sharedGlobals.xxxx
// 使用这种方式你还需手动将其应用于 THREEGlobals
Object.assign(THREEGlobals, sharedGlobals);

包含的 polyfill

除了部分功能在小程序环境无法实现,它们都尽可能的符合了 W3C 标准。 完整导出类型见 ts 声明。

完全符合 W3C 的

你可以像在 web 中一样使用它们。

  • AbortController
  • AbortSignal
  • DOMException
  • Event
  • EventTarget
  • FormData
  • Headers
  • KeyboardEvent
  • MouseEvent
  • PointerEvent
  • ProgressEvent
  • Touch
  • TouchEvent
  • UIEvent

下面两个相较于浏览器提供的难以避免的有性能损失

  • atob
  • btoa

大部分兼容的

  • Blob
  • Fetch
  • File
  • FileReader
  • Request
  • ReadableStream
  • Response
  • XMLHttpRequest

仅支持部分功能的

  • URL:仅支持 createObjectURLrevokeObjectURL, 可手动读取 blob url 数据,详见代码声明。

以下两个仅支持 utf-8 编码,并且是默认 polyfill 到全局对象上的

  • TextDecoder
  • TextEncoder

XML 拓展

由于用于支持 DOMParserXMLSerializer 相关功能的依赖包体积过大,所以默认未包含在本包内,可以在真正需要它时导入

js
import '@minisheep/mini-program-polyfill-core/xml-addon';

会自动根据之前导入主包的方式调整自身行为,如果使用的是 polyfill 形式:

js
import '@minisheep/mini-program-polyfill-core/wechat-polyfill'

那么你可以在 globalThis 上访问到 DOMParserXMLSerializer。 如果使用的是:

js
import { sharedGlobals } from '@minisheep/mini-program-polyfill-core/wechat'

这种形式,那么你也可以在 sharedGlobals 上访问到 DOMParserXMLSerializer。 当然,你也可以使用模块导出:

js
import { XMLSerializer, DOMParser } from '@minisheep/mini-program-polyfill-core/xml-addon'

typescript

SharedGlobals

ts
export const sharedGlobals =  {
  AbortController,
  AbortSignal,
  Blob,
  DOMException,
  Event,
  EventTarget,
  File,
  FileReader,
  FormData,
  Headers,
  KeyboardEvent,
  MouseEvent,
  PointerEvent,
  ProgressEvent,
  Request,
  ReadableStream,
  Response,
  TextDecoder,
  TextEncoder,
  Touch,
  TouchEvent,
  UIEvent,
  URL,
  XMLHttpRequest,
  atob,
  btoa,
  fetch
};

export type SharedGlobals = typeof sharedGlobals;