Scripts 学盟

标题: [jscript] WSH 编程中的 alert/confirm/prompt [打印本页]

作者: Alvin    时间: 2011-5-9 23:52:37     标题: [jscript] WSH 编程中的 alert/confirm/prompt

我们在写页面脚本时,经常用到的三个交互函数 alert, confirm, prompt
  1. alert(msg)  // 弹出一个消息框
  2. confirm(msg) // 弹出一个带有 确定/取消 按钮的消息框
  3. prompt(msg) // 弹出一个带文本域的消息框
复制代码
不陌生吧,但是在 windows 脚本编程中

当编写 jscript 时,我们也想使用这三个函数的时候,这可让好多人大大的意外一把

因为会出现这样子的提示:
缺少对象


原来,这三个函数都不是 jscript 的内置函数。

在浏览器编程中,因为宿主对象(window) 额外地实现了这三个函数

所以我们一直使用得不亦乐乎,以致很多人以为,alert, confirm, prompt 就是 js 的内置对象

呵呵,就是这么好用的函数,在 WSH 中,却却。。。。却没有提供。。。。

真是郁闷到家啊!

呵呵,不烦不烦,在 WSH 中,有这么一个内置对象: WScript   , 熟悉吧!

试一下这行代码:
  1. WScript.Echo("Yeah!");
复制代码
使用 WScript myJScript.js   命令,运行一下,

或者干脆双击一下你的  myJScript.js

看到了么。。。。 哈哈


当你使用 CScript.exe 创建 WSH 宿主环境时
WScript 对象的 Echo 方法用于向标准输出流打印文本内容

但当你使用 WScript.exe 创建 WSH 宿主环境时
WScript 对象的 Echo 方法用于弹出消息提示框,哈哈。。。

哈哈,对于 alert 是不是有了解决方案了呢
如果你习惯使用 alert(...), 不喜欢用 WScript.Echo(...), 那么你只要自定义一个函数:
  1. function alert(msg) {
  2.     WScript.Echo(msg + "");
  3. }
复制代码
可能有的时候啊,我们的脚本就必须运行在 Console 中,这时候,我们不家没有办法弹出消息框呢
这时候用 WScript.Echo 的话,是不会弹出的啊。只会将消息打印在控制台中。


答案是肯定的。其实呢,还有一个东东可以例用。
对,就是 WScript.Shell 对象。
我们可以通过 new ActiveXObject("WScript.Shell") 来创建一对个 WScript.Shell 的实例
它有个好方法: Popup( ... )
嘿嘿
  1. function alert(msg) {
  2.         var shell = new ActiveXObject("WScript.Shell");
  3.         shell.Popup(msg, 0, "消息提示", 64);
  4. }
复制代码
再试一下,是不是也可以弹出了。。。
PS:改变最后一个参数的值,还能弹出各种不同样式的提示框哦,试一试。

alert 解决了,那 confirm 呢?

嘿嘿
  1. function confirm(msg) {
  2.         var shell = new ActiveXObject("WScript.Shell");
  3.         return shell.Popup(msg, 0, "消息提示", 33) == 1;
  4. }
复制代码
哦,最后还有一个 prompt.

这个可不好搞了, WScript.Shell 的 Popup 方法也弹不出那个来。。。。
嘿嘿,还有还有
还记得 VBScript 不
VBScript 里头有个内置函数 InputBox  啊。。

切! 那也是 VBScript 来的,咱现在用的是 jscript! 你别告诉我们说 改写所有的 jscript 代码为 vbscript.


不,当然不用了。。。
还记得 ScriptControl 么?
我们只需要创建一个 ScriptControl 对象就行了,就可以在里边 Eval 执行 VBScript 代码了。
  1. function prompt(msg) {
  2.         var scriptCtrl = new ActiveXObject("ScriptControl");
  3.         msg = escape(msg + "");
  4.         scriptCtrl.Language = "VBScript";
  5.         var vbsCode = 'InputBox(Unescape("' + msg + '"), "输入框")';
  6.         return scriptCtrl.Eval(vbsCode);
  7. }
复制代码


------------------------------------
附: 关于 WScript.Shell 对象的 Popup 方法, 可以参考下面的帖子
http://www.iscripts.org/forum.php?mod=viewthread&tid=101




欢迎光临 Scripts 学盟 (http://www.iscripts.org/) Powered by Discuz! X2