12

我想对于一些只运行几个命令的简单测试,我会尝试使用一些 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

谷歌没有帮助,我确信我错过了一些愚蠢的东西,你们中的任何人都可以解释为什么这个简单的脚本不能运行吗?

4

5 回答 5

20

您正在调用一个名为 的函数alert,但这不是 JavaScript 的一部分(它是 DOM 0 的一部分,由浏览器提供)

由于您尚未定义它,因此您试图将undefined其视为一个函数,但事实并非如此。

Qnan 建议改用Echo方法。

于 2012-08-21T15:48:36.153 回答
7

尝试命名函数替换,因为 WSH 不支持 window.alert 方法。

if (!alert) alert = function foo(s){WScript.Echo(s)}
alert("hello world");
于 2012-08-21T15:52:41.470 回答
7

一个好的方法是重定向所有常见的输出,如下例所示。它将允许您测试为 Web 设计的 JavaScript,而无需重写。

测试.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
于 2015-09-10T15:15:47.817 回答
2

alert是浏览器window对象的方法。Window 的脚本宿主不提供这样的对象。

于 2012-08-21T15:49:12.750 回答
2

Microsoft 的JScript运行时编译器不提供当今所有主要浏览器都支持的 DOM(文档对象模型)中的原生 JavaScript 弹出窗口。但是,这可以通过将函数(在您的情况下alert)包装在 WSH(Windows 脚本主机)中的本机周围来完成,MessageBox就像 WSH 支持的任何其他脚本语言一样。

但是,只是为了给你一个更简单的选择......试试DeskJS。这是一款适用于 Windows 的新控制台式应用程序,旨在在远离浏览器的情况下运行纯 JavaScript(目前为ECMAScript 5.1 ),并支持所有基本的 JavaScript 弹出框以及该语言的其他漂亮附加功能。您可能比浏览器的控制台更喜欢它......

于 2016-01-14T21:04:28.710 回答