|
|
|
/**
|
|
|
|
* 用于 jquery 在 worker 环境或者 V8 引擎的 polyfill
|
|
|
|
*/
|
|
|
|
// import { _global } from "@/core/0.foundation";
|
|
|
|
|
|
|
|
const _global = globalThis;
|
|
|
|
|
|
|
|
const document = {};
|
|
|
|
const fakeElement = Object.create(document);
|
|
|
|
|
|
|
|
Object.assign(document, {
|
|
|
|
parentNode: null,
|
|
|
|
nodeType: 9,
|
|
|
|
head: fakeElement,
|
|
|
|
body: fakeElement,
|
|
|
|
ownerDocument: document,
|
|
|
|
documentElement: document,
|
|
|
|
toString() {
|
|
|
|
return "FakeDocument";
|
|
|
|
},
|
|
|
|
appendChild(child) {
|
|
|
|
return child;
|
|
|
|
},
|
|
|
|
implementation: {
|
|
|
|
createHTMLDocument() {
|
|
|
|
return {
|
|
|
|
body: {
|
|
|
|
childNodes: [],
|
|
|
|
},
|
|
|
|
};
|
|
|
|
},
|
|
|
|
createDocumentFragment() {
|
|
|
|
return this;
|
|
|
|
},
|
|
|
|
},
|
|
|
|
getElementById() {
|
|
|
|
return fakeElement;
|
|
|
|
},
|
|
|
|
createElement() {
|
|
|
|
return fakeElement;
|
|
|
|
},
|
|
|
|
createDocumentFragment() {
|
|
|
|
return this;
|
|
|
|
},
|
|
|
|
cloneNode() {
|
|
|
|
return this;
|
|
|
|
},
|
|
|
|
getElementsByTagName() {
|
|
|
|
return [fakeElement];
|
|
|
|
},
|
|
|
|
getElementsByClassName() {
|
|
|
|
return [fakeElement];
|
|
|
|
},
|
|
|
|
setAttribute() {
|
|
|
|
return null;
|
|
|
|
},
|
|
|
|
getAttribute() {
|
|
|
|
return null;
|
|
|
|
},
|
|
|
|
removeChild() {
|
|
|
|
return null;
|
|
|
|
},
|
|
|
|
addEventListener() {
|
|
|
|
return null;
|
|
|
|
},
|
|
|
|
removeEventListener() {
|
|
|
|
return null;
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
Object.assign(fakeElement, {
|
|
|
|
nodeType: 1,
|
|
|
|
style: {},
|
|
|
|
ownerDocument: document,
|
|
|
|
parentNod: fakeElement,
|
|
|
|
firstChild: fakeElement,
|
|
|
|
lastChild: fakeElement,
|
|
|
|
toString() {
|
|
|
|
return "FakeElement";
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
function polyfillProps(key, obj) {
|
|
|
|
_global[key] = _global[key] || obj;
|
|
|
|
if (typeof obj === "object") {
|
|
|
|
try {
|
|
|
|
Object.assign(_global[key], obj);
|
|
|
|
} catch(err) {
|
|
|
|
// _global[key] 可能只有 get 方法
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
_global.window = _global;
|
|
|
|
polyfillProps("XMLHttpRequest", function () {});
|
|
|
|
polyfillProps("document", document);
|