Google chrome extension 从chrome打包应用程序(或扩展名)启动带有默认文件处理程序的本地文件

Google chrome extension 从chrome打包应用程序(或扩展名)启动带有默认文件处理程序的本地文件,google-chrome-extension,google-chrome-app,Google Chrome Extension,Google Chrome App,我正在用Chrome打包的应用程序构建一个供内部使用的启动器,其中包括指向内部资源(数据库、web链接等)的链接 问题在于本地文件。我希望他们使用默认的处理程序启动。例如,access数据库在access中打开,等等 我试过: 创建文件链接file:///. 在这种情况下,单击时不会发生任何事情,也不会遵循链接 我在这里找到了一个扩展名(locallinks):,它将打开本地文件链接。我试着借用这个扩展名,并将文件链接传递到我打包的应用程序中的后台脚本,该应用程序将使用该url打开一个新窗口。不

我正在用Chrome打包的应用程序构建一个供内部使用的启动器,其中包括指向内部资源(数据库、web链接等)的链接

问题在于本地文件。我希望他们使用默认的处理程序启动。例如,access数据库在access中打开,等等

我试过:

  • 创建文件链接file:///. 在这种情况下,单击时不会发生任何事情,也不会遵循链接

  • 我在这里找到了一个扩展名(locallinks):,它将打开本地文件链接。我试着借用这个扩展名,并将文件链接传递到我打包的应用程序中的后台脚本,该应用程序将使用该url打开一个新窗口。不幸的是,这会导致找不到文件,即使对于文本文件这样的简单类型也是如此。因此,显然本地文件系统是沙盒。不足为奇

  • 我想,也许可以将链接传递到要打开的扩展名,但在这种情况下,该文件将在Chrome中打开,如果Chrome不支持它,它将尝试在本地下载该文件

  • 我使用Chrome打包应用程序的原因是: 1.这将经常更新,Chrome Web Store更新功能将使客户无需构建自己的更新机制即可轻松保持更新。 2.我们可以通过CWS将应用程序的安装限制为内部用户。 3.该应用程序将在Windows、Linux和Mac环境中使用。显然,这里的文件路径会有所不同,但由于它们指向samba共享,并且挂载点和网络共享驱动器是已知的,所以这是一个很容易克服的问题。 4.除了与Chrome应用程序的设计非常契合的launcher之外,我们还将在Chrome应用程序中构建其他功能

    我的想法是:

  • 本地客户端?我读过一些关于这些的文章,但我认为我最终会遇到与本机客户端应用程序相同的限制,即本机客户端应用程序将被沙盒化,并且可能实际上没有更好的方法启动本地文件

  • 插座?也许是一个简单的Qt应用程序监听套接字来启动应用程序?由于Qt应用程序将使用用户权限运行,并且套接字将只接受来自localhost的连接,因此我猜理论上,非特权应用程序可以使用套接字启动具有用户级权限的内容。是否有一种方法可以限制通过套接字的连接,使其只能从扩展访问

  • sockets解决方案并不理想,但可能有效,因为应用程序不会经常更新(如果有),因为功能非常简单

    我是否遗漏了一种明显的方法,即不需要另一个组件(Qt应用程序?

    与您的想法相关#2,不确定您愿意容忍的本地安装足迹,但您可以考虑:

    托管一个小型本地web服务器,或者您提到的Qt应用程序,它还可以启动本地程序(任何轻量级web服务器框架)。让您的打包应用程序或您自己的chrome扩展重写链接,使其与原始链接的url一起指向您的web服务器,从而可以轻松启动任何程序。缺点:这可能会导致在某些实现形式中绕过对原始链接的某些浏览器安全屏蔽

    你也可以看看它是否有用

    您可以通过确认来自本地计算机的请求,或者在chrome扩展中嵌入密钥或散列来限制访问。您可以在安装时生成密钥,使其在每台机器上都是唯一的。所有这些都无法通过适当的安全审查,因此这取决于您的风险状况。您将很难证明每个部分是安全的,并且没有潜在的攻击

    看来您需要一个chrome扩展和一个本地微型web服务器来完成这项工作。也许让用户下载文件并点击它们更容易


    如果这还不够,很抱歉,但基本上你是在尝试做一些在Chrome中设计不可能实现的事情,因此在这种情况下,可能不会有一个简单的解决方案。

    这个答案对我来说似乎是正确的,与我将要写的内容差不多。谢谢你的回复。我对此进行了更深入的研究,认为本地消息传递看起来是最好的方式。你的思维过程跟我的一样。