设为首页收藏本站

Scripts 学盟

 找回密码
 加入学盟

QQ登录

只需一步,快速开始

查看: 3919|回复: 0
打印 上一主题 下一主题

[jscript] WSH 编程中的 alert/confirm/prompt [复制链接]

管理员

超级大菜鸟

Rank: 9Rank: 9Rank: 9

跳转到指定楼层
1#
Alvin 实名认证  发表于 2011-5-9 23:52:37 |只看该作者 |倒序浏览
我们在写页面脚本时,经常用到的三个交互函数 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
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
分享分享0 收藏收藏0
您需要登录后才可以回帖 登录 | 加入学盟

手机版|Scripts 学盟   |

GMT+8, 2024-4-26 17:43 , Processed in 1.125301 second(s), 13 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部