get()

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];
        }
      },