`
hax
  • 浏览: 966524 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JScriptShell 0.1

    博客分类:
  • JS
阅读更多
WSH只能直接执行脚本文件,不像rhino/jsshell/jshost(jslibs)等,都有交互模式。所以自己写了一个JScriptShell玩。

废话不说,翠花,上代码!

jscriptshell.js
/*******************************************************************
*                   *******  *******  *******     *****  *******   *
* JScript Shell       *****  *******  ******   *  ******  ****   ***
* Version 0.1           ***  *******  *****   **  *******  *   *****
* 2009-02-06             **           ****   ***  *******    *******
*                         *  *******  ***         *****   *  *******
*   <johnhax@gmail.com>   *  *******  **   *****  ***   ****  ******
*                            *******  *   ******  *   *******  *****
********************************************************************
* Copyright 2009 HE Shi-Jun                                        *
*                                                                  *
* Licensed under the Apache License, Version 2.0 (the "License");  *
* you may not use this file except in compliance with the License. *
* You may obtain a copy of the License at                          *
*                                                                  *
*     http://www.apache.org/licenses/LICENSE-2.0                   *
*                                                                  *
* Unless required by applicable law or agreed to in writing,       *
* software distributed under the License is distributed on an      *
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,     *
* either express or implied. See the License for the specific      *
* language governing permissions and limitations.                  *
*******************************************************************/

function help() {
	commands = [
	'help()                 Display usage and help messages',
	"load(['foo.js' ...])   Load files named by string arugments",
	'print([exp ...])       Evaluate and print expressions',
	'quit()                 Quit the shell',
	'gc()                   Runs the garbage collector'
	]
	return "\
Command                Description\n\
=======                ===========\n\
" + commands.join('\n')
}

function load() {
	for (var i = 0, f; i < arguments.length; i++) {
		f = arguments[i]
		eval(readUrl(f))
	}
}

function readUrl(url) {
	if (isRelative(url)) url = WScript.ScriptFullName + '/../' + url
	if (readUrl.req == null)
		readUrl.req = WScript.CreateObject('Msxml2.XMLHTTP.3.0')
	readUrl.req.open('GET', url, false)
	readUrl.req.send(null)
	return readUrl.req.responseText
	
	function isRelative(url) {
		return !/^[a-zA-Z]+:/.test(url)
	}
}

function print() {
	WScript.Echo(Array.prototype.join.call(arguments, ' '))
}

function quit() {
	WScript.Quit()
}

function gc() {
	CollectGarbage()
}

new function () {
	var l = 0, newInput = true, input, output, lastLine
	while (true) {
		if (newInput) {
			WScript.StdOut.Write('js> ')
			input = WScript.StdIn.ReadLine()
			if (input == '?') input = 'help()'
		} else {
			WScript.StdOut.Write('  > ')
			input += '\n' + (lastLine = WScript.StdIn.ReadLine())
		}
		l++
		try {
			output = eval(input)
		} catch(e) {
			if (e instanceof SyntaxError && lastLine != ';;') {
				newInput = false
				continue
			}
			output = '<stdin>, line ' + l + ': ' + e.name + ': ' + e.message
		}
		WScript.Echo(output)
		newInput = true
	}
}


执行:
C:\jscriptshell>cscript jscriptshell.js

如果你的script host默认使用cscript(可通过 cscript /H:CScript 来设置),则可以直接:
C:\jscriptshell>jscriptshell


TODO:
1. 加入类似于rhino的命令行参数
2. load脚本的错误处理
2
0
分享到:
评论
2 楼 鹤惊昆仑 2009-02-07  
这么创建、使用XMLHttpRequest的方式很新鲜呵。要是有个dir()函数可以查看对象内容就更妙了。最新版js引擎(IE8使用的)好像有内置的toJson函数。
1 楼 jindw 2009-02-06  
有意思。
不过我更喜欢直接用firebug

如要加载其他脚本的时候,也是这样就行了:
$import("org.jside.Tween")

相关推荐

Global site tag (gtag.js) - Google Analytics