在Windows系统中运行JavaScript

15

我想对一些简单的测试运行一些命令,所以我尝试使用JavaScript并从Windows XP的命令行中运行它。

因此,为了进行快速测试,我创建了一个脚本

alert('Hello, World!');

然后尝试运行它

D:\>Cscript.exe hello.js
Microsoft (R) Windows Script Host Version 5.7
Copyright (C) Microsoft Corporation. All rights reserved.

D:\hello.js(1, 1) Microsoft JScript runtime error: Object expected

谷歌并没有提供帮助,我确定我遗漏了一些愚蠢的东西,你们中的任何一个人能否解释一下为什么这个简单的脚本不能运行?


你为什么要从命令行运行它,而不是将它放在HTML页面中呢? - imulsion
我知道足够的东西,知道你正在做的某些事情会让解析器感到困惑。但我无法立即说出具体是什么。 - Wug
可能是因为Windows命令行没有window.alert可用。 - mplungjan
5个回答

22
您正在调用名为alert的函数,但这不是JavaScript的一部分(它是DOM 0的一部分,由浏览器提供)。
由于您没有定义它,您试图将undefined视为函数,但它不是函数。
Qnan建议改用Echo方法。

3
应该使用类似 WSH.Echo("Hello world"); 的语句。 - Qnan
谢谢,我想我需要更多地了解它。本以为这可能比编写Java应用程序更快。我只是想要一种脚本语言,可以让我编写一个快速工具,生成一个不错的GUI。但这并没有变得很快! - Ne0

7

由于WSH不支持window.alert方法,请尝试使用命名函数replace。

if (!alert) alert = function foo(s){WScript.Echo(s)}
alert("hello world");

为了让它工作,我不得不给函数命名,例如:function foo(s){WScript.Echo(s);} - MatthewMartin

7
一个好方法是像下面的示例一样重定向所有通常的输出。这将使您能够测试为 Web 设计的 JavaScript,而无需重写。 test.js
var console = {
    info: function (s){
        WSH.Echo(s);
    }
}
var document = {
    write : function (s){
        WSH.Echo(s);
    }
}
var alert = function (s){
    WSH.Echo(s);
}

console.info("test");
document.write("test2");
alert("test3");

您可以像这样调用脚本:
Cscript.exe test.js firstParam secondParam

这将为您提供:
test
test1
test2

2

微软的 JScript 运行时编译器不提供原生 JavaScript 弹出窗口,这是由 DOM(文档对象模型)支持的所有主流浏览器所支持的。然而,可以通过将函数(在您的情况下为 alert)包装在 WSH(Windows 脚本宿主)中找到的原生 MessageBox 周围来完成此操作,就像使用 WSH 支持的任何其他脚本语言一样。

但是,为了给您提供更简单的选择...尝试一下 DeskJS。它是一个新的针对 Windows 的控制台风格应用程序,旨在运行纯 JavaScript(目前基于 ECMAScript 5.1),远离浏览器,并支持所有基本的 JavaScript 弹出框以及其他有趣的语言扩展。您可能会比浏览器的控制台更喜欢它...


2

alert 是浏览器的 window 对象的一种方法。Windows 脚本宿主程序不提供此对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接