使用第三方易语言 JS 运行组件(推荐)
这是最直接、功能最强大的方法,有许多易语言爱好者开发的组件专门用于执行 JS 代码,它们通常封装了 V8 或 Chakra 等现代 JS 引擎,性能好,支持 ES6+ 语法。

(图片来源网络,侵删)
常用组件:
- 易语言 JS 运行支持库:在易语言论坛或资源站搜索,有很多版本,选择一个口碑好的即可。
- EJSS (Easy JavaScript Support):另一个流行的选择。
核心原理: 组件提供一个“执行JS代码”的命令,你可以将 JS 代码作为字符串传给它,它会返回执行结果。
示例:使用假想的 易语言 JS 运行支持库
目标: 访问 https://httpbin.org/get,并从中解析出 url 字段的值。

(图片来源网络,侵删)
准备工作
- 下载并安装一个易语言 JS 运行组件,并在易语言中引用它(通常是点击“窗口” -> “支持库...”,然后选择对应的
.e文件)。 - 创建一个易语言程序,界面可以很简单,一个“执行”按钮,一个“输出”编辑框。
易语言代码
.版本 2
.程序集 窗口程序集_启动窗口
.子程序 _按钮_执行_被单击
.局部变量 js代码, 文本型
.局部变量 返回结果, 文本型
.局部变量 url, 文本型
' 1. 定义要执行的 JavaScript 代码
' 我们使用 fetch API (现代浏览器和JS引擎都支持) 来获取网页内容
' 然后使用 .json() 将响应体解析为JSON对象
' 我们返回 JSON.stringify(obj) 来获取整个JSON字符串,以便在易语言中解析
js代码 = “
// 使用 fetch 获取网页
fetch('https://httpbin.org/get')
.then(response => {
if (!response.ok) {
throw new Error('网络响应错误');
}
return response.json(); // 解析JSON数据
})
.then(data => {
// 将整个JSON对象转换为字符串,这样易语言才能接收
// 注意:JS中的JSON.stringify在V8引擎中可能叫 stringify
// 这里我们直接返回 data.url 来获取特定字段
return data.url;
})
.catch(error => {
console.error('获取数据时出错:', error);
return '发生错误: ' + error.message;
});
”
' 2. 调用组件的命令执行JS代码
' 注意:这里假设组件名为 "JS运行支持库",并且有 "执行" 命令
' 你需要根据你实际使用的组件来调整命令名和参数
返回结果 = JS运行支持库.执行 (js代码)
' 3. 将返回的结果显示在编辑框中
编辑框_输出.内容 = 返回结果
' --- 另一种更简洁的JS代码(直接返回JSON字符串) ---
' js代码 = “
' fetch('https://httpbin.org/get')
' .then(response => response.json())
' .then(data => JSON.stringify(data))
' .catch(error => JSON.stringify({error: error.message}));
' ”
' ' 执行后,返回结果是一个完整的JSON字符串,你可以用易语言的“取中间文本”等命令来解析 "url" 字段。
优点:
- 功能强大,可以执行复杂的JS逻辑。
- 不依赖外部浏览器,速度快。
- 可以模拟浏览器行为,如处理DOM操作。
缺点:

(图片来源网络,侵删)
- 需要额外下载和集成第三方组件,可能存在兼容性问题或不稳定的风险。
使用 WebBrowser 控件执行 JS
这是最传统的方法,利用 Windows 自带的 WebBrowser 控件(基于 IE 内核),它可以直接与网页中的 JS 交互。
核心原理:
通过 WebBrowser 控件的 Document.InvokeScript 方法,向当前加载的网页注入并执行 JS 代码。
示例: 访问一个简单的本地 HTML 文件,并执行其中的 JS。
准备工作
- 在易语言窗口上放置一个
WebBrowser控件(通常在“基本组件”面板里)。 - 创建一个“执行JS”按钮。
创建一个测试用的 HTML 文件
在你的易语言程序同目录下,创建一个名为 test.html 的文件,内容如下:
<!DOCTYPE html>
<html>
<head>JS测试页面</title>
</head>
<body>
<h1>欢迎!</h1>
<p>这是一个测试页面。</p>
<script>
function getHello() {
return "你好,易语言!";
}
function getPageTitle() {
return document.title;
}
</script>
</body>
</html>
易语言代码
.版本 2 .程序集 窗口程序集_启动窗口 .子程序 __启动窗口_创建完毕 .局部变量 js代码, 文本型 ' 窗口创建时,加载我们准备好的HTML文件 WebBrowser1.导航 (“\test.html”) ' 注意路径,如果你的HTML在其他位置请修改 .子程序 _按钮_执行JS_被单击 .局部变量 返回结果, 文本型 ' 1. 定义要执行的JS代码 ' 这里我们调用HTML文件中定义的 getHello 函数 js代码 = "getHello()" ' 2. 使用 InvokeScript 执行JS ' 第一个参数是JS函数名,第二个参数是函数的参数(这里没有参数,所以传空数组) ' 注意:这个命令可能会因为JS引擎不同而失败,例如在非IE模式下 返回结果 = WebBrowser1.文档.执行脚本 (js代码) ' 3. 显示结果 信息框 (“JS执行结果: ” + 返回结果, 0, , ) ' --- 另一个例子:获取网页标题 --- ' js代码 = "getPageTitle()" ' 返回结果 = WebBrowser1.文档.执行脚本 (js代码) ' 信息框 (“网页标题是: ” + 返回结果, 0, , )
优点:
- 不需要额外组件,是 Windows 自带的。
- 可以直接与已加载页面的 JS 上下文交互。
缺点:
- 依赖 IE 内核,对现代 JS (ES6+) 和 CSS 支持不佳,很多网站无法正常加载或执行。
- 执行 JS 的方式在不同浏览器模式下可能不兼容。
- 必须先成功加载网页,才能执行 JS。
调用外部浏览器命令行(读取渲染后内容)
这种方法不“运行”JS,而是利用浏览器(如 Chrome)的命令行工具,让它打开网页、执行所有 JS 和 CSS,然后将最终的 HTML 源码抓取回来。
核心原理:
通过命令行调用浏览器(如 chrome.exe)并带上特定参数,让它静默渲染页面,然后将输出重定向到一个文件,最后用易语言读取这个文件。
示例: 抓取 https://www.baidu.com 渲染后的 HTML。
准备工作
- 确保你的电脑上安装了 Chrome 浏览器,并知道它的安装路径(
C:\Program Files\Google\Chrome\Application\chrome.exe)。 - 了解 Chrome 的命令行参数,特别是
--headless(无头模式,不显示窗口)和--dump-dom(输出DOM结构)。
易语言代码
.版本 2
.程序集 窗口程序集_启动窗口
.子程序 _按钮_抓取渲染后内容_被单击
.局部变量 chrome路径, 文本型
.局部变量 目标网址, 文本型
.局部变量 命令行, 文本型
.局部变量 临时文件, 文本型
.局部变量 渲染后HTML, 文本型
' 1. 设置Chrome路径和目标网址
' 注意:这里需要替换成你自己的Chrome实际路径
chrome路径 = "C:\Program Files\Google\Chrome\Application\chrome.exe"
目标网址 = "https://www.baidu.com"
' 2. 创建一个临时文件来存储HTML输出
临时文件 = 取运行目录 () + "\rendered.html"
' 3. 构建完整的命令行
' --headless: 无头模式
' --disable-gpu: 禁用GPU加速,在某些服务器上需要
' --dump-dom: 输出DOM到标准输出
' --timeout=30: 设置超时时间(秒)
' --virtual-time-budget=10000: 模拟页面加载10秒,确保JS执行完成
' 最后将输出重定向 (>) 到临时文件
命令行 = “"” + chrome路径 + “" --headless --disable-gpu --dump-dom --timeout=30 --virtual-time-budget=10000 ” + 目标网址 + “ > ” + “"” + 临时文件 + “"”
' 4. 执行命令
' 使用 .dos命令() 来执行系统命令
输出调试文本 (“正在执行命令: ” + 命令行)
.程序集_运行命令 (命令行, , , )
' 5. 等待命令执行完成,并读取临时文件的内容
' 注意:这里需要加一个短暂的延迟,确保文件写入完成
延时 (2000)
(文件是否存在 (临时文件))
渲染后HTML = 到文本 (读入文件 (临时文件))
编辑框_输出.内容 = 取中间文本 (渲染后HTML, 1, 2000) ' 只显示前2000个字符,避免卡顿
删除文件 (临时文件) ' 清理临时文件
否则
信息框 (“抓取失败,请检查Chrome路径和网络!”, 16, , )
输出调试文本 (“抓取失败,临时文件未生成。”)
返回
结束如果
优点:
- 100% 还原真实浏览器环境,能执行任何 JS,处理最复杂的网页。
- 是爬虫抓取动态网页的终极方案。
缺点:
- 非常慢,需要启动整个浏览器进程。
- 依赖外部软件,必须确保目标机器安装了指定浏览器。
- 代码相对复杂,需要处理命令行和文件。
总结与选择建议
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| JS运行组件 | 功能强、速度快、不依赖浏览器 | 需要第三方组件,有兼容风险 | 需要执行复杂JS逻辑、模拟浏览器行为、不依赖外部环境的场景。 |
| WebBrowser控件 | 系统自带,无需额外组件 | 依赖IE内核,JS支持差,必须先加载网页 | 与简单的、基于IE的旧网页进行交互。 |
| 外部浏览器命令行 | 100%还原真实渲染,JS支持最完美 | 速度慢,依赖外部软件,代码复杂 | 爬虫抓取高度动态化的现代网页(如SPA应用),需要获取最终渲染结果。 |
给你的建议:
- 如果你只是想执行一些固定的JS逻辑来处理数据,比如解析JSON、加密解密等,首选方法一。
- 如果你需要和已经加载好的旧式网页交互,可以尝试方法二。
- 如果你是做爬虫,目标网页是现代的、JS驱动的(比如React/Vue构建的),并且不介意速度和依赖,那么方法三是不二之选。
