我对这个没有太大的希望,但我不得不问。我希望,出于教学目的,想出一些方法,学生可以将一个简单的javascript程序加载到浏览器中,并让它以老式的命令行方式与它们交互,在那里打印一行然后读取一行输入。如果你使用prompt(),这可以正常工作,但是它创建弹出窗口的事实在美学方面很烦人,今天的浏览器乐于自愿扼杀过度使用它的脚本。问题是,prompt()似乎是浏览器Javascript实际暂停脚本等待输入的唯一方式。如果我们避免它,那就会立即引发我们不得不处理实时GUI事件输入模型。
我一直在寻找伪造它的方法 - 设置某种环境,在这种环境中,Javascript方法可以等待输入,然后在给出时返回。我到目前为止最好的可能性是将它连接到Java applet,但java applet品牌现在有点中毒,我怀疑人们会想要安装插件。还有另一种方式吗?工人线程?浏览器插件?一些服务器端的技巧?有没有人有想法?
这个问题现在已经存在了很久......我想知道是否添加了promises和异步/等待Javascript使得现在更有可能了吗?
......我有点工作了。如果read-eval-print循环在async
函数中并且使用await
作为读取输入的行,那么您确实可以在事件驱动中创建一个老式的线性读取 - 评估 - 打印循环浏览器环境。但我不认为你可以让主线程在没有异步函数的情况下等待输入,除非使用了格式prompt
方法。
答案 0 :(得分:3)
您想要的技术术语是REPL: R ead- E 评估 - P rint- L < /强>接力。那里有很多REPL。
使用谷歌浏览器的内置console!这是一个Javascript REPL,可以 让您与网页进行交互。您可以使用Chrome上的Windows和Unix上的Ctrl + Shift + I或Mac上的等效命令(Google it!)来访问它。
要加载文件并使用它,您的学生需要做的就是创建一个这样的目录结构:
project
|--> index.html
|--> javascript.js
确保index.html
的{{1}}标记指向script
,然后使用Chrome打开javascript.js
。瞧!您已经加载了Javascript文件,现在可以在Chrome中使用它。
这是最好的解决方案,因为你获得了DOM的全部功能,可以做REPL的东西,并且几乎无痛 - 每个人使用Chrome,你的学生甚至可以回家并乱用它完全。
您也可以使用Repl.it
而不是重新发明轮子。
这是一个基于浏览器的Javascript REPL网站,支持插入任意Javascript程序,并与其内容进行交互。这是你可能最接近满足你的要求 - 它将无法与DOM交互(显然),但它不仅仅是工作。
如果可以放宽对基于Web的解决方案的要求,只需在终端上使用Node.js'内置REPL就足够了。
您可以在实验室的计算机上安装Node,并让人们以该容量使用Javascript。没有DOM,但你当然可以让他们编写函数和算法来解决简单的问题。另外,这是向他们介绍Javascript不再受客户端约束这一事实的好方法。
您将在实际终端中与Javascript进行交互,而不是在浏览器中进行模拟,这是另一个简洁的奖励。
有些问题的评论听起来像是想要一种能够使用浏览器中的Javascript与终端实用程序进行交互的方法。如果是这种情况,则不可能。
Javascript有 no 方法可以在命令行上评估,解析或执行任何操作不是使用Javascript编写的。你不能指望使用基于浏览器的解决方案等同于bash index.html
- 这是因为浏览器无法访问你的底层文件系统,这是一件好事。出于同样的原因,您无法运行ls
,sed
,awk
等 - Unix实用程序无法访问到浏览器。当然,有很多方法可以使用Node运行Unix实用程序,但是接下来你将教他们如何使用Node,而不是如何使用Unix控制台。
但是,如果你想要的只是一种从浏览器SSH到公共环境的方法,那么肯定有基于浏览器的方法。 FireSSH是一个Firefox插件(现在也移植到Chrome),可以让人们通过SSH进入公共服务器。然后,他们可以执行grep
,ls
等操作,并将其运行到服务器中,并将结果传回浏览器屏幕。当然,在这种情况下你必须仔细考虑安全性,但我认为仅仅为这个服务器授予用户权限应该足够了。
请注意,FireSSH不使用Javascript来解析或执行任何操作 - 它所做的只是将您键入的命令转发给服务器,让服务器远程执行这些命令,然后将结果传回屏幕。
我在更详细地了解了OP的要求之后添加了这个。
这是一个被问到before的问题。我喜欢图书馆解决方案,而在2013年,iocream.js就是为这种浏览器功能而开发的。您可以将其嵌入页面中,并使用vim
函数指定值。
如果使用Node.js解决方案,到目前为止最好的方法是使用prompt
库。我个人觉得它在Node.js应用程序中嵌入非常有用。
SpiderMonkey是Mozilla基于C ++的Javascript引擎,支持名为jin
的函数。不幸的是,似乎没有主流的浏览器实现。