获取 jsdom 窗口变量

Hel*_*rld 3 javascript node.js jsdom

我正在尝试从外部访问 jsom 实例内的变量:

下面是一个例子:

<!doctype html>
<html lang="en">
<head>
  ...
  <script>
    window.foo = "hello world";
  </script>
</head>
  ....
</html>
Run Code Online (Sandbox Code Playgroud)

然后尝试从“外部”jsdom访问foo变量:

let dom = new JSDOM(...);
dom.window.onload = () => { console.log(dom.window.foo); }; // prints undefined
Run Code Online (Sandbox Code Playgroud)

这个问题似乎描述了一个相同的 GitHub 问题,作者通过删除资源选项解决了这个问题。但是,我不能这样做,因为我需要运行外部脚本。

有什么方法可以调用函数或访问 jsdom 实例中存在的某些变量,并将资源设置为可用

Que*_*tin 7

请参阅文档,其中说:

jsdom最强大的能力就是可以执行jsdom内部的脚本。... 这也是非常危险的 ... 默认情况下禁用执行嵌入在 HTML 中的脚本的能力 ... 要启用在页面内执行脚本,您可以使用该runScripts: "dangerously"选项

因此:

const jsdom = require("jsdom");
const { JSDOM } = jsdom;

const dom = new JSDOM(`<!doctype html>
<html lang="en">
<head>
  ...
  <script>
    window.foo = "hello world";
  </script>
</head>
  ....
</html>
`, { runScripts: "dangerously", resources: "usable" });

dom.window.onload = () => { console.log(dom.window.foo); };
Run Code Online (Sandbox Code Playgroud)