in packages/core/browser-vm/src/Document.js [26:73]
get(target, name) {
switch (name) {
case 'body':
return context.body;
case 'location':
return context.location;
case 'defaultView':
return context.window;
case 'write':
case 'writeln':
return () => {};
case 'createElement':
return (...args) => {
const el = document.createElement(...args);
el.ownerContext = context;
el.appId = options.id;
// 对于 script 标签如果开启防逃逸,就直接 hack script 标签
if (el.tagName === 'SCRIPT' && !options.enableScriptEscape) {
injectHTMLScriptElement(el);
}
return el;
};
case 'addEventListener':
return (...args) => {
eventListeners.push(args);
return target.addEventListener(...args);
};
case 'removeEventListeners':
return () => {
for (const args of eventListeners) {
target.removeEventListener(...args);
}
};
default:
}
// TODO: hijack document.getElementsByTagName('body')
if (typeof target[name] === 'function') {
return target[name].bind && target[name].bind(target);
} else {
return target[name];
}
},