小码哥的IT人生

首页 > JS > nodejs

node.js实例:使用jsdom模块解析获取读取页面window对象全局变量

nodejs 2023-09-12 16:43:11小码哥的IT人生shichen

一、功能需求:

给定的web页面元素中window对象包含全局对象的变量window.test=123;要求读取该页面html代码,并解析出全局变量test。

html页面代码如下:
<!DOCTYPE html>
<html lang="zh_CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>html页面代码</title>
</head>
<body>
<h1>html获取全局变量测试</h1>
<script>
window.test = '123';
</script>
</body>
</html>

二、解决方法:

1. 安装 jsdom 模块:
npm install jsdom
或者yarn安装:
yarn add jsdom
2. 引入 jsdom 模块:
// commonjs模式:
const jsdom = require('jsdom');
// module模式:
// import jsdom from "jsdom";
3. 实例化 new jsdom.JSDOM 设置runScripts属性为dangerously,从而页面内启用脚本:
let htmlCode = `
<!DOCTYPE html>
<html lang="zh_CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>html页面代码</title>
</head>
<body>
<h1>html获取全局变量测试</h1>
<script>
window.test = '123';
</script>
</body>
</html>
`
const dom = new jsdom.JSDOM(htmlCode, {
    runScripts: "dangerously",//在页面内启用脚本
});
4. 解析出 window 对象,并输出全局变量:
const window = dom.window;
console.log(window.test); // 输出: 123
5. 完整实例:
const jsdom = require('jsdom');
let htmlCode = `
<!DOCTYPE html>
<html lang="zh_CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>html页面代码</title>
</head>
<body>
<h1>html获取全局变量测试</h1>
<script>
window.test = '123';
</script>
</body>
</html>
`
const dom = new jsdom.JSDOM(htmlCode, {
    runScripts: "dangerously",//在页面内启用脚本
    // resources: "usable",
    // virtualConsole: new jsdom.VirtualConsole() // 启用虚拟控制台,避免 jQuery 提示的 "no document specified" 错误
});
const window = dom.window;
console.log(window.test); // 输出: 123
运行结果:
123

版权所有 © 小码哥的IT人生
Copyright © phpcodeweb All Rights Reserved
ICP备案号:苏ICP备17019232号-2  

苏公网安备 32030202000762号

© 2021-2024