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

时间:2014-03-20 14:08:45

标签: google-chrome-extension google-chrome-app

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

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

我试过了:

  1. 创建文件链接文件:///。点击此方案中没有任何反应,并且未遵循链接。

  2. 我在这里找到了一个扩展名(locallinks):https://code.google.com/p/locallinks/,它将打开本地文件链接。我尝试从该扩展中借用并将文件链接传递给我打包应用程序中的后台脚本,然后打开一个带有该URL的新窗口。不幸的是,即使对于简单类型(如文本文件),也会导致找不到文件。很明显,本地文件系统是沙盒的。不足为奇。

  3. 我想也许可以将链接传递给要打开的扩展程序,但在这种情况下,该文件将在Chrome中打开,如果Chrome不支持,则会尝试在本地下载该文件

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

    我的想法是:

    1. 原生客户?我已经阅读了一些关于这些的内容,但我认为我最终会遇到相同的限制,其中本机客户端应用程序将被沙箱化,并且可能实际上没有更好的方式来启动本地文件。

    2. 插座?也许一个简单的Qt应用程序在套接字上侦听以启动应用程序?由于Qt应用程序将使用用户权限运行,并且套接字只接受来自localhost的连接,我想理论上套接字可以被非特权应用程序用于启动具有用户级权限的内容。有没有办法让我通过套接字限制只能从我的扩展程序访问?

    3. 套接字解决方案并不理想,但可能有效,因为应用程序不会经常更新(如果有的话),因为功能非常简单。

      我是否错过了一种明显的方法,不需要其他组件(Qt应用程序?)

1 个答案:

答案 0 :(得分:1)

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

托管一个微不足道的本地Web服务器,或者您提到的Qt应用程序,它还可以启动本地程序(任何这些轻量级Web服务器框架)。让您的打包应用程序或您自己的chrome扩展程序重写链接,使它们指向您的Web服务器以及原始链接的URL,这可以轻松启动任何程序。缺点:这可能导致在某些形式的实施中绕过某些浏览器安全筛选原始链接。

如果有帮助,您也可以查看this stackoverflow question

您可以通过确认来自本地计算机的请求,或通过在Chrome扩展程序中嵌入密钥或哈希来限制访问。您可以在安装时生成密钥,使其在每台计算机上都是唯一的。这些都不会通过非常适当的安全审查,因此这取决于您的风险状况。您将很难证明每个部分的安全性和清除漏洞攻击潜力。

您似乎需要Chrome扩展程序和本地微型Web服务器来完成此工作。也许让用户只需下载文件并点击它们就更容易了......

很抱歉,如果这不够用,但基本上你是在尝试做一些设计不能在Chrome中实现的东西,所以在这种情况下可能没有一个简单的解决方案。