首页 > 解决方案 > 如何在 nodejs /es2017 中访问窗口或文档对象

问题描述

我正在尝试在我的打字稿应用程序中访问 document.getElementbyID 和 document.location。但是出现错误。

(节点:3024)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝 id:1):ReferenceError:文档未定义

注意:请注意,我不想使用 jquery 以减少我的包大小。

节点中 jquery 的任何其他替换也是可以接受的,但尺寸较小

标签: node.jstypescriptdomecmascript-2017

解决方案


实际上,nodejs 代码不在浏览器上运行。它的服务器端脚本语言因此没有窗口或文档对象。如果您仍想使用 document.getElementbyID。你可以使用“傀儡师”。

Puppeteer 是一个 Node 库,它提供了一个高级 API 来通过 DevTools 协议控制无头 Chrome 或 Chromium。它还可以配置为使用完整的(非无头)Chrome 或 Chromiu

例子,

  1. npm install puppeteer
  2. 添加了下面的代码,
const puppeteer = require('puppeteer');

function async xyz() {
   const browserData = await puppeteer.launch();
   page = await browserData.newPage();
   await page.goto('http://example.com/some.html', {waitUntil: 'load'});

const xyzPage = await page.evaluate(() => {
     return document.getElementById("xyzid").innerHTML;
});

console.log(xyzPage);

}

注意:还有另一个 npm 包可以提供对 JSDOM 等文档对象的访问。但是很多人都在使用“puppeteer”。


推荐阅读