【问题标题】:Access windows command line from chrome (or firefox) extension从 chrome(或 firefox)扩展访问 windows 命令行
【发布时间】:2016-08-10 13:01:37
【问题描述】:

是否可以编写一个以任意方式访问 Windows 命令行的扩展程序?或者是否有一些浏览器提供此功能。

为什么?在我们的制造车间,我们有几个应用程序需要访问 PC 上的硬件。目前,我们必须编写和部署小型应用程序才能做到这一点,但从浏览器部署它们会很棒。

显然在正常情况下这是一个安全问题,但是否可以添加一个扩展来规避这个问题?

【问题讨论】:

    标签: google-chrome google-chrome-extension firefox-addon


    【解决方案1】:

    是的,在 Firefox 中你当然可以这样做。

    Firefox 有4 types of extensions:(WebExtensionsAdd-on SDKBootstrapedOverlay/XUL)。

    WebExtensions 目前无法执行此操作,并且可能永远无法执行此操作(它们类似于 Google Chrome 扩展程序)。 Mozilla 正朝着只有 WebExtensions 和 Add-on SDK 扩展的方向发展。因此,这应该是一个附加 SDK 扩展。

    您将需要使用system/child_process API,它是node.js child_process API 的实现。您可以通过以下代码访问 API:

    var childProcess = require("sdk/system/child_process");
    

    然后您可以轻松地create a new process 并使用stdinstdoutstderr 与它通信。

    您必须在主(后台)脚本中完成子进程之间的所有通信。所有communication with the webpage you are viewing 必须在content script 中。您可以选择仅在 URL 匹配某些页面或使用 page-mod 的域时加载内容脚本(这将是没有任何任意网站能够运行命令的一部分)。你需要pass messages back and forth through from your content script to your background script

    所以,基本上,沟通会是这样的:

    网页⟷内容脚本⟷后台脚本⟷子进程

    实现一个允许网页运行任意命令、提供命令行参数、输入数据和接收输出数据等的消息传递方案会相对容易。

    【讨论】:

      【解决方案2】:

      我不建议使用浏览器进行操作。浏览器及其安全模型发展非常迅速,您可能会发现自己不断地与变化作斗争。

      相反,如果您的计算机位于域中,请使用组策略来部署您的应用。这是一个指南:http://www.itninja.com/blog/view/the-guide-to-deploying-software-using-group-policy

      如果您的工厂计算机不在域中或组策略看起来太复杂,那么您可以使用图标快捷方式运行批处理文件,该文件将应用程序从本地源复制到工厂计算机。或者,如果您尝试在无人看管的情况下运行应用程序,您可以将该批处理文件作为计划任务运行。

      祝你好运!

      【讨论】:

        【解决方案3】:

        对于现代浏览器,您可以使用 Native Messaging 来实现这一点。 This link 告诉我们有一个项目可以将此原生消息传递 API 添加到 WebExtensions。

        有关 chrome 扩展,请参阅Native Messaging 了解更多详情。

        基本上,您需要一个扩展程序和一个本地主机,在扩展程序和本地主机之间建立通信,扩展程序用于接收来自浏览器的命令,而本地主机实际上正在执行您希望命令行执行的任何操作。

        【讨论】:

        • 如果我明白了,那我还是要实现一个“本地主机”吧?
        • @MitchVanDuyn,是的,扩展程序无法访问那些原生 api。
        猜你喜欢
        • 2015-10-09
        • 2013-12-08
        • 2012-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-12
        • 2019-03-20
        相关资源
        最近更新 更多