【问题标题】:Start an external application from a Google Chrome Extension?从 Google Chrome 扩展程序启动外部应用程序?
【发布时间】:2011-02-08 18:34:47
【问题描述】:

如何从 Google Chrome 扩展程序启动外部应用程序?

所以基本上我有一个可执行文件,它可以在您启动它时完成这项工作。我需要能够在没有窗口的情况下启动它(它是一个控制台应用程序)并在参数中将当前 URL 传递给它,

【问题讨论】:

  • 如果有神,那么谷歌在任何情况下都不会允许任何人这样做。
  • 你能不能至少有你自己的 exe 文件,你可以开始...不用考虑 c 或 C++。
  • @Azeem.Butt 如果您在公司环境中并且所有用户都明确允许此类操作怎么办?对我来说似乎是一个非常有用的工作流程。因此本机消息传递(首先需要安装/运行单独的本机应用程序)似乎是要走的路(请参阅 jonny 的答案)
  • @msangel 因为你提到的问题在这个问题之后,所以它应该被认为是重复的。

标签: google-chrome executable google-chrome-extension


【解决方案1】:

Native messaging host

Chrome 扩展

{
  "name": "AppName",
  "description": "",
  "version": "1.0",
  "manifest_version": 3,
  "permissions": [
    "nativeMessaging"  // ? https://developer.chrome.com/docs/extensions/mv3/declare_permissions/
  ]
  // ...
}

主机

添加架构

@echo off
:: If you add "/f" then you can force write.
REG ADD "HKCU\Software\Google\Chrome\NativeMessagingHosts\com.my_company.my_application" ^
 /ve /t REG_SZ ^
 /d "%~dp0Mymanifest.json"
// Mymanifest.json
{
  "name": "com.my_company.my_application",
  "description": "My Application",
  "path": "relative_dir/my.exe",
  "type": "stdio",
  "allowed_origins": [
    "chrome-extension://nbjjflbnekmabedahdolabcpahfjojjb/"
  ]
}

chrome.runtime.sendNativeMessage

示例:

// your.js
chrome.runtime.sendNativeMessage("com.my_company.my_application",
  {key1: "value1", key2: "value2"}, // ? Send those parameters to your program.
  (response) => {
    console.log(response)
  }
)

示例存储库

我创建了一个项目thunder/e11fde9,其最终目标是能够使用浏览器作为输入,然后在本地打开指定的文件(如果可能,不用鼠标)

它仍在开发中,但我认为早期的代码已经足够了。链接如下。

其中已经有记录浏览器传输结果的日志,同时浏览器也可以获取程序的返回值。

参考

【讨论】:

    【解决方案2】:

    以前,您可以通过NPAPI plugins 来执行此操作。

    但是,Google is now phasing out NPAPI for Chrome,因此首选的方法是使用native messaging API。外部应用程序必须注册本机消息传递主机才能与您的应用程序交换消息。

    【讨论】:

    【解决方案3】:

    您不能启动任意命令,但如果您的用户愿意进行一些额外的设置,您可以使用custom protocols

    例如您让用户进行设置,以便 some-app:// 链接启动“SomeApp”,然后在 my-awesome-extension 打开指向 some-app://some-data-the-app-wants 的选项卡,您就可以开始了!

    【讨论】:

    • 我认为这应该是新接受的答案,它似乎在 Win& Linux 上工作得很好,很想知道梨……或者是香蕉……里面有水果的东西: -)
    【解决方案4】:

    我选择假设,因为我现在无法验证。

    使用 Apache,如果您在本地计算机上创建一个调用可执行文件的 php 脚本,然后通过 POST 或 GET 通过 html/javascript 调用此脚本?

    它会起作用吗?

    告诉我。

    【讨论】:

    • 当然,如果 Apache 进程具有所需的权限,这将起作用,但意义何在,然后您需要安装 Apache 并在 上打开网络服务器端口用户的计算机....
    【解决方案5】:

    问题在 google 上的页面排名很好,因此对于正在寻找此问题答案的任何人来说,这可能会有所帮助。

    谷歌浏览器市场空间中有一个扩展可以做到这一点: https://chrome.google.com/webstore/detail/hccmhjmmfdfncbfpogafcbpaebclgjcp

    【讨论】:

    • 请注意 link-only answers 是不鼓励的,所以答案应该是寻找解决方案的终点(而不是另一个参考中途停留,随着时间的推移往往会变得陈旧)。请考虑在此处添加独立的概要,并保留链接作为参考。
    • @kleopatra 我已经为链接提供了一些上下文
    • 这是一个“用外部应用程序打开”的扩展,源代码托管在 BitBucket (bitbucket.org/lck/open-with-external-application) 上,它使用 SimpleGet 插件。学习的好例子。
    • 请注意,此插件使用现已弃用的 NPAPI,因此它不适用于现代版本的 Chrome(Linux 版 35)。
    【解决方案6】:

    Chrome 有一个扩展 (SimpleGet),它有一个适用于 Windows 和 Linux 的插件,可以使用命令行参数执行应用程序.....
    http://pinel.cc/
    http://code.google.com/p/simple-get/
    @987654323 @

    【讨论】:

    • Simple get 是个下载管理器,不是他们要的。
    • @joanlofe "有一个适用于 Windows 和 Linux 的插件,可以使用命令行参数执行应用程序"
    • 其他人在看这个,这个扩展使用了 NPAPI 扩展,它将在今年年底被淘汰。