【问题标题】:How do I run Terminal on a server from JavaScript used in Chrome?如何从 Chrome 中使用的 JavaScript 在服务器上运行终端?
【发布时间】:2016-10-09 00:43:36
【问题描述】:

我想知道如何从 JavaScript 打开终端 shell,然后写入命令行(这将在专用服务器上)。

我曾研究过使用 ActiveX,但发现它只能在 Windows 和 Internet Explorer 上使用。

我要实现的完整功能是首先打开一个终端shell,打开一个独立的Maya实例,运行我的Python脚本并保存Maya场景。

我希望这一切在我的 Three.js 场景中单击“导出”按钮后在后台运行。因此,我希望能够从我的 JavaScript 代码运行命令行。

【问题讨论】:

  • 不能单独从 JavaScript 代码启动其他程序,除非你发现了一些安全漏洞。
  • 这没有意义。如果您打算在本地打开终端窗口,则无法完成。如果你打算为服务器打开一个终端,那就更不可能了。
  • 想象一下您访问的任何网页都可以打开您的命令行并运行它喜欢的任何命令...您是否正在想象您的系统一团糟?这就是为什么你不能从 JS 控制命令行的原因。
  • @DBS 我希望向服务器发送一个命令,然后该服务器将打开应用程序。
  • 您绝对可以向某些服务器端代码发送 AJAX 请求,但这与使用 JS 在本地打开命令行非常不同。但随后它将是执行操作的服务器端代码,而不是客户端 JS。

标签: javascript macos google-chrome terminal


【解决方案1】:

您不能使用纯 JavaScript,因为这是一个安全问题。 ActiveX 是一个巨大的失败,并且由于它的主要安全漏洞而基本上被弃用(IE 有一个可以使用 ActiveX 的硬编码网站白名单)。

要像这样远程执行任何操作,您需要编写一个 chrome 扩展插件,其中 javascript 调用浏览器外进程的方法。

编辑:从另一个答案看来,使之成为可能的工具也已被弃用。也许如果您描述应用程序的性质,我们可以帮助您找到不同的解决方案。要执行此类操作,您可能需要运行本地休息服务器/服务。

【讨论】:

  • 你能指出一个资源,暗示 Chrome 扩展可以运行类似于终端的东西吗?因为this question's answers 说不能。
  • 我更新了我的问题以更好地描述我的意图。该应用程序将来会在专用服务器上运行,此时我正在使用 AMPPS 进行开发。
【解决方案2】:

普通网页或网络应用程序中的 JavaScript 代码无法访问并在您的工作站上运行任意可执行文件,这可能是出于明显的安全原因。

Chrome 的扩展程序cannot run local executables either.

FireBreath 对您没有用处,因为 Chrome 正在积极移除对 NPAPI 的支持(它已在 Linux 上移除,不了解 Mac OS X)并且从不——完全正确地——支持 ActiveX。

从根本上说,您需要转向不同的方向。也许是 Mac OSX 的应用程序框架,它支持使用 HTML、CSS 和 JavaScript 来构建应用程序,因此它是一个完整的应用程序,而不是托管在浏览器中的东西。如果您搜索“用 JavaScript 和 HTML 构建 OSX 应用程序”,您会发现几个解决方案,例如(在撰写本文时)AppJSSentenza——但这些只是示例,并非推荐。


根据您的编辑,我要做的是在 NodeJS(有或没有 ExpressJS)中编写一个服务器片段,并让浏览器页面向服务器发送一个 ajax 请求,这可以产生您希望它产生的进程。

【讨论】:

  • 我有什么办法可以实现从 JavaScript 运行应用程序所需的功能,或者这是一个死胡同?我已经修改了我的问题,以便更清楚地解释我的意图。
  • @skelto:来自 JavaScript,是的,正如我在答案末尾概述的那样。来自 Chrome 中的 JavaScript,不,我不知道。
  • @skelto:看到您的编辑后,我也在答案末尾添加了注释。
【解决方案3】:

查看 uri 方案。这是可能的,但需要更多的步骤。 Uri 方案是计算机知道如何处理诸如 http//: 或 file//: 之类的 URL 的方式

我从 iTunes 得到这个想法,所以如果你能找到它,你可以看看他们的 uri 方案。如果您在网络浏览器中访问 iTunes Store,并且安装了 iTunes(最近 ice 发现它已损坏),它将显示在 iTunes 中打开并生成一个 URL,该 URL 将使用特定参数打开 iTunes

【讨论】:

  • 通过使用 exec() 函数向终端发送命令,我已经能够从 PHP 脚本打开独立版本的 Maya。然后我需要在 Maya 中运行 Python 脚本。我走上了在终端中打开 Maya Python 解释器的路线。尽管一旦我在终端中运行了 Python 解释器,我就无法再发送命令了。你知道向运行 Python 解释器的终端发送命令吗?
  • 这可能需要在一个新问题中提出,但我想我会问你,以防你对此有所了解。
  • 你的后端是什么?
【解决方案4】:

要从 Chrome 中使用的 javascript 运行终端,从选项卡菜单中,单击更多工具 --->开发人员工具,然后选择控制台选项卡

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-21
    • 2015-08-30
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    相关资源
    最近更新 更多