Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取jsdom窗口变量_Javascript_Node.js_Jsdom - Fatal编程技术网

Javascript 获取jsdom窗口变量

Javascript 获取jsdom窗口变量,javascript,node.js,jsdom,Javascript,Node.js,Jsdom,我试图从外部访问jsom实例内部的变量: 下面是一个例子: <!doctype html> <html lang="en"> <head> ... <script> window.foo = "hello world"; </script> </head> .... </html> 这个问题似乎描述了作者通过删除资源选项来解决它的问题。但是,我不能这样做,因为我需要外部脚本来运行 在资源

我试图从外部访问jsom实例内部的变量:

下面是一个例子:

<!doctype html>
<html lang="en">
<head>
  ...
  <script>
    window.foo = "hello world";
  </script>
</head>
  ....
</html>
这个问题似乎描述了作者通过删除资源选项来解决它的问题。但是,我不能这样做,因为我需要外部脚本来运行

在资源设置为“可用”的情况下,是否有任何方法可以调用函数或访问jsdom实例中存在的某个变量?

请参见其中的说明:

jsdom最强大的功能是它可以在jsdom中执行脚本…这也是非常危险的…执行嵌入HTML中的脚本的功能在默认情况下被禁用…要启用在页面内执行脚本,可以使用
runScripts:“危险地”
选项

因此:

constjsdom=require(“jsdom”);
const{JSDOM}=JSDOM;
constdom=newjsdom(`
...
window.foo=“你好世界”;
....
`,{runScripts:“危险”,resources:“可用”});
dom.window.onload=()=>{console.log(dom.window.foo);};

我已经有了这个选项。它不会影响从dom外部访问窗口变量的能力。它只影响能够在dom内运行脚本,这是不相关的。以下是我所拥有的:让dom=newJSDOM(html,{url:“+path,contentType:”text/html”,includeNodeLocations:true,storageQuota:10000000,runScripts:dangerously,resources:new JSDOM.ResourceLoader({strictSSL:false})})。@HelloWorld-这个答案中的脚本运行并输出“HelloWorld”。如果我更改选项以匹配您评论中的选项,那么…此答案中的脚本仍然运行并输出“hello world”。所以这个答案解决了您在这个问题中提出的所有问题。@HelloWorld-您真正的问题可能与嵌入HTML文档中的JS的实际工作方式有关,但您将其简化了很多,从而将问题从中删除了。这就是为什么您需要提供一个测试,它将演示问题,而不仅仅是一些代码片段。我开始认为您是正确的,先生!;)我在这里发现了一些其他的东西。。。我的问题不对。我将更新您的答案并删除我的问题:)
let dom = new JSDOM(...);
dom.window.onload = () => { console.log(dom.window.foo); }; // prints undefined
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); };