anjia / blog

博客,积累与沉淀
106 stars 4 forks source link

浏览器的所有 API 及其对应标准 #94

Open anjia opened 2 years ago

anjia commented 2 years ago

今天我们来梳理下浏览器上的所有 API,即 window 的全局属性。

以 Chrome 为例,在开发者工具的 Console 选项卡里执行 Object.getOwnPropertyNames(window) 共得到了 1020 个属性。

// Chrome 98.0.4758.80 (Official Build) (x86_64)
let all = Object.getOwnPropertyNames(window);
console.log('总数', all.length); // 1020

我们知道,浏览器的 API 大致分为以下 4 类:

接下来,我们就逐类处理下。

JavaScript 固有对象

这部分由标准规定,是随着 JavaScript 运行时环境的创建而自动创建的对象实例。在任何 JavaScript 代码执行之前,它们就已经被创建好了,类似于基础库的角色。

ECMA262 标准中,可以找到 47 个“顶级”固有对象,过滤的脚本如下:

// https://tc39.es/ecma262/multipage/ecmascript-data-types-and-values.html#sec-well-known-intrinsic-objects
let IntrinsicObjects = new Set();
document.querySelector('#table-7').querySelectorAll('td:nth-child(2)').forEach(item => {
    let name = item.innerText.split('.')[0];
    if (name) {
        IntrinsicObjects.add(name)
    }
});
console.log(IntrinsicObjects); // 47个

再加 3 个和 bigInt、4 个值属性、3 个内存管理和 5 个 Generator,一共 62 个。转成字符串方便查看,如下:

// 47个JS 固有对象      https://tc39.es/ecma262/multipage/ecmascript-data-types-and-values.html#sec-well-known-intrinsic-objects
// 3个BigInt           https://tc39.es/ecma262/multipage/numbers-and-dates.html#sec-bigint-objects
// 4个值属性+3个内存管理  https://tc39.es/ecma262/multipage/global-object.html#sec-value-properties-of-the-global-object
// 5个Generator        https://tc39.es/ecma262/multipage/control-abstraction-objects.html#sec-generator-objects
const JS_IntrinsicObjects = [
    'globalThis', 'undefined', 'NaN', 'Infinity',  // 值属性(4个)
    'Boolean', 'String', 'Number', 'BigInt', 'Symbol', 'Object',  // 基本对象
    'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'decodeURI', 'encodeURI', 'encodeURIComponent', 'decodeURIComponent', // 函数属性
    'AggregateError', 'FinalizationRegistry', 'WeakRef',  // 内存管理(3个)
    'Array', 'Int8Array', 'Int16Array', 'Int32Array', 'Float32Array', 'Float64Array', 'Uint8Array', 'Uint16Array', 'Uint32Array', 'Uint8ClampedArray', 'BigInt64Array', 'BigUint64Array', // 索引集合
    'ArrayBuffer', 'SharedArrayBuffer', 'DataView', // 二进制操作
    'Map', 'Set', 'WeakMap', 'WeakSet',  // 键集合
    'Date', 'RegExp', 'Promise', 'Proxy', 'Function', // 基础功能和数据结构
    'Math', 'JSON', 'Reflect', 'Atomics', // 命名空间
    'Error', 'SyntaxError', 'TypeError', 'URIError', 'EvalError', 'RangeError', 'ReferenceError',
    'Generator', 'GeneratorFunction', 'AsyncFunction', 'AsyncGenerator', 'AsyncGeneratorFunction' // Generator(5个)
];

DOM API

DOM 标准主要定义了:

下面是与 DOM 标准相关的 window 全局属性(含部分事件和节点)。

const DOM = [
    'Event', 'CustomEvent', 'EventTarget', 'AbortController', 'AbortSignal', 'NonElementParentNode', 'DocumentOrShadowRoot', 'ParentNode', 'NonDocumentTypeChildNode', 'ChildNode', 'Slottable', 'NodeList', 'HTMLCollection', 'MutationObserver', 'MutationRecord', 'Node', 'Document', 'XMLDocument', 'DOMImplementation', 'DocumentType', 'DocumentFragment', 'ShadowRoot', 'Element', 'NamedNodeMap', 'Attr', 'CharacterData', 'Text', 'CDATASection', 'ProcessingInstruction', 'Comment', 'AbstractRange', 'StaticRange', 'Range', 'NodeIterator', 'TreeWalker', 'DOMTokenList', 'XPathResult', 'XPathExpression', 'XPathEvaluatorBase', 'XPathEvaluator', 'XSLTProcessor', // [data-dfn-type='interface']
    'EventListener', 'MutationCallback', 'NodeFilter', 'XPathNSResolver', // [data-dfn-type='callback']
    'addEventListener', 'removeEventListener', 'dispatchEvent' // [data-dfn-type='method']
];

CSSOM API

这部分主要对应 2 个标准:

const CSSOM = [
    'MediaList', 'StyleSheet', 'CSSStyleSheet', 'StyleSheetList', 'LinkStyle', 'CSSRuleList', 'CSSRule', 'CSSStyleRule', 'CSSImportRule', 'CSSGroupingRule', 'CSSPageRule', 'CSSMarginRule', 'CSSNamespaceRule', 'CSSStyleDeclaration', 'ElementCSSInlineStyle', 'getComputedStyle'
];

const CSSOM_View = [
    'matchMedia', 'Screen', 'MediaQueryList', 'MediaQueryListEvent', 'CaretPosition', 'GeometryUtils',
    'moveTo', 'moveBy', 'resizeTo', 'resizeBy', // browsing context
    'innerWidth', 'innerHeight', // viewport
    'scrollX', 'pageXOffset', 'scrollY', 'pageYOffset', 'scroll', 'scrollTo', 'scrollBy', // viewport scrolling 
    'screenX', 'screenLeft', 'screenY', 'screenTop', 'outerWidth', 'outerHeight', 'devicePixelRatio' // client
];

此外,还有很多名字里包含“CSS”字符串的属性/接口,这里就不一一列出来了(详见文末附录),因为代码里可以直接用 string pattern 过滤掉。

HTML 相关

这部分主要分为:

// https://html.spec.whatwg.org/multipage/window-object.html#the-window-object
const HTMLSpec_Window = [
    'window', 'self', 'document',
    'name', 'location', 'history', 'customElements', // the current browsing context
    'locationbar', 'menubar', ' personalbar', 'scrollbars', 'statusbar', 'toolbar', 'personalbar',
    'status', 'close', 'closed', 'stop', 'focus', 'blur',
    'frames', 'length', 'top', 'opener', 'parent', 'frameElement', 'open', // other browsing contexts
    'navigator', 'clientInformation', 'originAgentCluster', // the user agent
    'alert', 'confirm', 'prompt', 'print', 'postMessage',  // user prompts
];
const HTMLSpec_Others = [
    'Storage', 'WindowSessionStorage', 'WindowLocalStorage', 'StorageEvent',
    'sessionStorage', 'localStorage',
    'atob', 'btoa', 'createImageBitmap',
    'crossOriginIsolated', 'isSecureContext', 'origin', 'setTimeout', 'clearTimeout', 'setInterval', 'clearInterval', 'queueMicrotask', 'structuredClone', // 'For web developers (non-normative)'
    'cancelAnimationFrame', 'requestAnimationFrame',
    'HTMLAllCollection', 'HTMLFormControlsCollection', 'RadioNodeList', 'HTMLOptionsCollection',
    'DOMParser', 'DOMException', 'DOMStringList', 'DOMStringMap', 'HTMLHyperlinkElementUtils',
    'MediaError', 'AudioTrackList', 'AudioTrack', 'VideoTrackList',
    'VideoTrack', 'TextTrackList', 'TextTrack', 'TextTrackCueList', 'TextTrackCue', 'TimeRanges', 'TrackEvent', 'ValidityState', 'SubmitEvent', 'FormDataEvent',
    'CanvasRenderingContext2D', 'CanvasState', 'CanvasTransform', 'CanvasCompositing', 'CanvasImageSmoothing', 'CanvasFillStrokeStyles', 'CanvasShadowStyles', 'CanvasFilters', 'CanvasFilter', 'CanvasRect', 'CanvasDrawPath', 'CanvasUserInterface', 'CanvasText', 'CanvasDrawImage', 'CanvasImageData', 'CanvasPathDrawingStyles', 'CanvasTextDrawingStyles', 'CanvasPath', 'CanvasGradient', 'CanvasPattern', 'TextMetrics', 'ImageData', 'Path2D', 'ImageBitmapRenderingContext', 'OffscreenCanvas',
    'OffscreenCanvasRenderingContext2D', 'CustomElementRegistry', 'ElementInternals', 'ElementContentEditable',
    'DataTransfer', 'DataTransferItemList', 'DataTransferItem', 'DragEvent', 'Window', 'BarProp', 'History', 'Location',
    'PopStateEvent', 'HashChangeEvent', 'PageTransitionEvent', 'BeforeUnloadEvent', 'ErrorEvent', 'PromiseRejectionEvent', 'GlobalEventHandlers', 'WindowEventHandlers', 'DocumentAndElementEventHandlers', 'WindowOrWorkerGlobalScope', 'DOMParser', 'Navigator', 'NavigatorID', 'NavigatorLanguage', 'NavigatorOnLine', 'NavigatorContentUtils', 'NavigatorCookies', 'ImageBitmap', 'AnimationFrameProvider', 'MessageEvent', 'EventSource', 'WebSocket', 'CloseEvent', 'MessageChannel', 'MessagePort', 'BroadcastChannel', 'WorkerGlobalScope', 'DedicatedWorkerGlobalScope', 'SharedWorkerGlobalScope', 'AbstractWorker', 'Worker', 'SharedWorker', 'NavigatorConcurrentHardware', 'WorkerNavigator', 'WorkerLocation', 'FakeWorkletGlobalScope', 'WorkletGlobalScope', 'Worklet', 'External'
];

WHATWG 的其它标准

const WHATWG_Others = [
    'console', // https://console.spec.whatwg.org
    'XMLHttpRequestEventTarget', 'XMLHttpRequestUpload', 'XMLHttpRequest', 'FormData', 'FormDataEntryValue', 'ProgressEvent', // https://xhr.spec.whatwg.org
    'fetch', 'Headers', 'Body', 'Request', 'Response', // https://fetch.spec.whatwg.org/
    'URL', 'URLSearchParams', // https://url.spec.whatwg.org
    'NavigatorStorage', 'StorageManager',  // https://storage.spec.whatwg.org/
    'Notification', 'NotificationEvent', // https://notifications.spec.whatwg.org/#api
    'WritableStream', 'WritableStreamDefaultWriter', 'WritableStreamDefaultController', // https://streams.spec.whatwg.org
    'TextDecoder', 'TextEncoder', 'TextDecoderStream', 'TextEncoderStream',  // https://encoding.spec.whatwg.org/#dom-textencoder
    'ReadableStream', 'ReadableStreamDefaultReader', 'ReadableStreamBYOBReader', 'ReadableStreamDefaultController', 'ReadableByteStreamController', 'ReadableStreamBYOBRequest', 'WritableStream', 'WritableStreamDefaultWriter', 'WritableStreamDefaultController', 'TransformStream', 'TransformStreamDefaultController', 'ByteLengthQueuingStrategy', 'CountQueuingStrategy' // https://streams.spec.whatwg.org/#blqs-class
];

ECMA402

const ECMA402 = [
    'Intl'  // 国际化, https://tc39.es/ecma402/#intl-object
];

W3C 的其它标准

// 内容较多,为了可读性就不全贴了
// 详见源码 https://github.com/anjia/blog/blob/master/src/browserAPIs.html
const W3C_Others = [
    'StylePropertyMap', 'StylePropertyMapReadOnly', // W3C, CSS Typed OM Level 1
    'FontFace', 'FontFaceSet', 'FontFaceSetLoadEvent', // W3C, CSS Font Loading 3
    'AnimationEvent', // W3C, CSS Animations
    'TransitionEvent', // W3C, CSS Transitions
    'indexedDB', // W3C, Indexed Database API 
    'crypto', // W3C, Web Cryptography API
    'caches',  // W3C, Service Workers
    'performance',  // W3C, Navigation Timing
    'Selection',   // W3C, ED, Selection API
    ...
    ...
    'DOMRectList', 'DOMRect', 'DOMQuad', 'DOMRectReadOnly', 'DOMPointReadOnly', 'DOMPoint', 'DOMMatrixReadOnly', 'DOMMatrix' // W3C, Geometry Interfaces Module Level 1
];

其它组织

const Other_Orgs = [
    'WebAssembly',  // https://webassembly.github.io/spec/js-api/#webassembly-namespace
    'InputDeviceCapabilities', //  https://wicg.github.io/input-device-capabilities
    'XRCompositionLayer', 'XRProjectionLayer', 'XRQuadLayer', 'XRCylinderLayer', 'XREquirectLayer', 'XRCubeLayer', 'XRSubImage', 'XRWebGLSubImage', 'XRWebGLBinding', 'XRMediaBinding', 'XRLayerEvent', // https://immersive-web.github.io/layers/
    'XRLightEstimate', 'XRLightProbe',  // https://immersive-web.github.io/lighting-estimation/
    'XRHitTestSource', 'XRTransientInputHitTestSource', 'XRHitTestResult', 'XRTransientInputHitTestResult', 'XRRay', // https://immersive-web.github.io/hit-test/, WebXR Hit Test Module
    'SVGElement', 'SVGBoundingBoxOptions', 'SVGGraphicsElement', 'SVGGeometryElement', 'SVGNumber', 'SVGLength', 'SVGAngle', 'SVGNumberList', 'SVGLengthList', 'SVGStringList', 'SVGAnimatedBoolean', 'SVGAnimatedEnumeration', 'SVGAnimatedInteger', 'SVGAnimatedNumber', 'SVGAnimatedLength', 'SVGAnimatedAngle', 'SVGAnimatedString', 'SVGAnimatedRect', 'SVGAnimatedNumberList', 'SVGAnimatedLengthList', 'SVGUnitTypes', 'SVGTests', 'SVGFitToViewBox', 'SVGURIReference', // https://svgwg.org/svg2-draft/types.html
    'SVGTransform', 'SVGTransformList', 'SVGAnimatedTransformList', 'SVGPreserveAspectRatio', 'SVGAnimatedPreserveAspectRatio', // https://svgwg.org/svg2-draft/coords.html
    'SVGRectElement', 'SVGCircleElement', 'SVGEllipseElement', 'SVGLineElement', 'SVGAnimatedPoints', 'SVGPointList', 'SVGPolylineElement', 'SVGPolygonElement', // https://svgwg.org/svg2-draft/shapes.html
    'MIDIInputMap', 'MIDIOutputMap', 'MIDIAccess', 'MIDIPort', 'MIDIInput', 'MIDIOutput', 'MIDIMessageEvent', 'MIDIConnectionEvent', // Web MIDI API, https://webaudio.github.io/web-midi-api/#midiaccess-interface
    'WebGLQuery', 'WebGLSampler', 'WebGLSync', 'WebGLTransformFeedback', 'WebGLVertexArrayObject', 'WebGL2RenderingContextBase', 'WebGL2RenderingContextOverloads', 'WebGL2RenderingContext', 'WebGLObject', 'WebGLBuffer', 'WebGLFramebuffer', 'WebGLProgram', 'WebGLRenderbuffer', 'WebGLShader', 'WebGLTexture', 'WebGLUniformLocation', 'WebGLActiveInfo', 'WebGLShaderPrecisionFormat', 'WebGLRenderingContextBase', 'WebGLRenderingContext', 'WebGLContextEvent' // WebGL
];

过滤完以上提到的所有内容,还剩 41 个属性,它们有些是已经废弃/过时了的,有些是尚未标准化的,具体内容详见源码,代码的运行结果如下图所示。

browserAPIs

总结

本文介绍并梳理了浏览器的所有 API 及其对应标准,旨在对其有个概况性的认识。

  1. JavaScript 固有对象(62个)
  2. DOM API:节点、事件、Range 等
  3. CSSOM:CSSOMCSSOM View
  4. HTML:全局属性、元素及事件等
  5. 其它

代码详见:https://github.com/anjia/blog/blob/master/src/browserAPIs.html

主要标准

扩展阅读

附录

// Node 159
// Event 75, on 110
// CSS 46
// webkit 13, Error 15
let pattern = {
    "Node": ["Option","Image","Audio","XMLDocument","Text","ShadowRoot","SVGViewElement","SVGUseElement","SVGTitleElement","SVGTextPositioningElement","SVGTextPathElement","SVGTextElement","SVGTextContentElement","SVGTSpanElement","SVGSymbolElement","SVGSwitchElement","SVGStyleElement","SVGStopElement","SVGSetElement","SVGScriptElement","SVGSVGElement","SVGRectElement","SVGRadialGradientElement","SVGPolylineElement","SVGPolygonElement","SVGPatternElement","SVGPathElement","SVGMetadataElement","SVGMaskElement","SVGMarkerElement","SVGMPathElement","SVGLinearGradientElement","SVGLineElement","SVGImageElement","SVGGraphicsElement","SVGGradientElement","SVGGeometryElement","SVGGElement","SVGForeignObjectElement","SVGFilterElement","SVGFETurbulenceElement","SVGFETileElement","SVGFESpotLightElement","SVGFESpecularLightingElement","SVGFEPointLightElement","SVGFEOffsetElement","SVGFEMorphologyElement","SVGFEMergeNodeElement","SVGFEMergeElement","SVGFEImageElement","SVGFEGaussianBlurElement","SVGFEFuncRElement","SVGFEFuncGElement","SVGFEFuncBElement","SVGFEFuncAElement","SVGFEFloodElement","SVGFEDropShadowElement","SVGFEDistantLightElement","SVGFEDisplacementMapElement","SVGFEDiffuseLightingElement","SVGFEConvolveMatrixElement","SVGFECompositeElement","SVGFEComponentTransferElement","SVGFEColorMatrixElement","SVGFEBlendElement","SVGEllipseElement","SVGElement","SVGDescElement","SVGDefsElement","SVGComponentTransferFunctionElement","SVGClipPathElement","SVGCircleElement","SVGAnimationElement","SVGAnimateTransformElement","SVGAnimateMotionElement","SVGAnimateElement","SVGAElement","ProcessingInstruction","Node","HTMLVideoElement","HTMLUnknownElement","HTMLUListElement","HTMLTrackElement","HTMLTitleElement","HTMLTimeElement","HTMLTextAreaElement","HTMLTemplateElement","HTMLTableSectionElement","HTMLTableRowElement","HTMLTableElement","HTMLTableColElement","HTMLTableCellElement","HTMLTableCaptionElement","HTMLStyleElement","HTMLSpanElement","HTMLSourceElement","HTMLSlotElement","HTMLSelectElement","HTMLScriptElement","HTMLQuoteElement","HTMLProgressElement","HTMLPreElement","HTMLPictureElement","HTMLParamElement","HTMLParagraphElement","HTMLOutputElement","HTMLOptionElement","HTMLOptGroupElement","HTMLObjectElement","HTMLOListElement","HTMLModElement","HTMLMeterElement","HTMLMetaElement","HTMLMenuElement","HTMLMediaElement","HTMLMarqueeElement","HTMLMapElement","HTMLLinkElement","HTMLLegendElement","HTMLLabelElement","HTMLLIElement","HTMLInputElement","HTMLImageElement","HTMLIFrameElement","HTMLHtmlElement","HTMLHeadingElement","HTMLHeadElement","HTMLHRElement","HTMLFrameSetElement","HTMLFrameElement","HTMLFormElement","HTMLFontElement","HTMLFieldSetElement","HTMLEmbedElement","HTMLElement","HTMLDocument","HTMLDivElement","HTMLDirectoryElement","HTMLDialogElement","HTMLDetailsElement","HTMLDataListElement","HTMLDataElement","HTMLDListElement","HTMLCanvasElement","HTMLButtonElement","HTMLBodyElement","HTMLBaseElement","HTMLBRElement","HTMLAudioElement","HTMLAreaElement","HTMLAnchorElement","Element","DocumentType","DocumentFragment","Document","Comment","CharacterData","CDATASection","Attr"],
    "Event": ["WheelEvent","WebGLContextEvent","UIEvent","TransitionEvent","TrackEvent","TouchEvent","TextEvent","SubmitEvent","StorageEvent","SecurityPolicyViolationEvent","RTCTrackEvent","RTCPeerConnectionIceEvent","RTCPeerConnectionIceErrorEvent","RTCErrorEvent","RTCDataChannelEvent","RTCDTMFToneChangeEvent","PromiseRejectionEvent","ProgressEvent","PopStateEvent","PointerEvent","PageTransitionEvent","OfflineAudioCompletionEvent","MutationEvent","MouseEvent","MessageEvent","MediaStreamTrackEvent","MediaStreamEvent","MediaQueryListEvent","MediaEncryptedEvent","KeyboardEvent","InputEvent","IDBVersionChangeEvent","HashChangeEvent","GamepadEvent","FormDataEvent","FontFaceSetLoadEvent","FocusEvent","Event","ErrorEvent","DragEvent","CustomEvent","CompositionEvent","CloseEvent","ClipboardEvent","BlobEvent","BeforeUnloadEvent","BeforeInstallPromptEvent","AudioProcessingEvent","AnimationEvent","CookieChangeEvent","DeviceMotionEvent","DeviceOrientationEvent","MIDIConnectionEvent","MIDIMessageEvent","MediaKeyMessageEvent","SensorErrorEvent","HIDConnectionEvent","HIDInputReportEvent","PaymentMethodChangeEvent","PresentationConnectionAvailableEvent","PresentationConnectionCloseEvent","USBConnectionEvent","XRInputSourceEvent","XRInputSourcesChangeEvent","XRReferenceSpaceEvent","XRSessionEvent","AnimationPlaybackEvent","PaymentRequestUpdateEvent","PictureInPictureEvent","TaskPriorityChangeEvent","SpeechSynthesisErrorEvent","SpeechSynthesisEvent","VirtualKeyboardGeometryChangeEvent","webkitSpeechRecognitionError","webkitSpeechRecognitionEvent"],
    "on": ["onsearch","onappinstalled","onbeforeinstallprompt","onbeforexrselect","onabort","onblur","oncancel","oncanplay","oncanplaythrough","onchange","onclick","onclose","oncontextmenu","oncuechange","ondblclick","ondrag","ondragend","ondragenter","ondragleave","ondragover","ondragstart","ondrop","ondurationchange","onemptied","onended","onerror","onfocus","onformdata","oninput","oninvalid","onkeydown","onkeypress","onkeyup","onload","onloadeddata","onloadedmetadata","onloadstart","onmousedown","onmouseenter","onmouseleave","onmousemove","onmouseout","onmouseover","onmouseup","onmousewheel","onpause","onplay","onplaying","onprogress","onratechange","onreset","onresize","onscroll","onsecuritypolicyviolation","onseeked","onseeking","onselect","onslotchange","onstalled","onsubmit","onsuspend","ontimeupdate","ontoggle","onvolumechange","onwaiting","onwebkitanimationend","onwebkitanimationiteration","onwebkitanimationstart","onwebkittransitionend","onwheel","onauxclick","ongotpointercapture","onlostpointercapture","onpointerdown","onpointermove","onpointerup","onpointercancel","onpointerover","onpointerout","onpointerenter","onpointerleave","onselectstart","onselectionchange","onanimationend","onanimationiteration","onanimationstart","ontransitionrun","ontransitionstart","ontransitionend","ontransitioncancel","onafterprint","onbeforeprint","onbeforeunload","onhashchange","onlanguagechange","onmessage","onmessageerror","onoffline","ononline","onpagehide","onpageshow","onpopstate","onrejectionhandled","onstorage","onunhandledrejection","onunload","ondevicemotion","ondeviceorientation","ondeviceorientationabsolute","onpointerrawupdate"],
    "CSS": ["CSSVariableReferenceValue","CSSUnparsedValue","CSSUnitValue","CSSTranslate","CSSTransformValue","CSSTransformComponent","CSSSupportsRule","CSSStyleValue","CSSStyleSheet","CSSStyleRule","CSSStyleDeclaration","CSSSkewY","CSSSkewX","CSSSkew","CSSScale","CSSRuleList","CSSRule","CSSRotate","CSSPropertyRule","CSSPositionValue","CSSPerspective","CSSPageRule","CSSNumericValue","CSSNumericArray","CSSNamespaceRule","CSSMediaRule","CSSMatrixComponent","CSSMathValue","CSSMathSum","CSSMathProduct","CSSMathNegate","CSSMathMin","CSSMathMax","CSSMathInvert","CSSKeywordValue","CSSKeyframesRule","CSSKeyframeRule","CSSImportRule","CSSImageValue","CSSGroupingRule","CSSFontFaceRule","CSSCounterStyleRule","CSSConditionRule","CSS","CSSAnimation","CSSTransition"],
    "webkit": ["webkitURL","webkitRTCPeerConnection","webkitMediaStream","WebKitMutationObserver","WebKitCSSMatrix","webkitStorageInfo","webkitCancelAnimationFrame","webkitRequestAnimationFrame","webkitSpeechGrammar","webkitSpeechGrammarList","webkitSpeechRecognition","webkitRequestFileSystem","webkitResolveLocalFileSystemURL"],
    "Error": ["Error","AggregateError","EvalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError","RTCError","OverconstrainedError","MediaError","GeolocationPositionError","DOMError","reportError","WebTransportError"],
};