Google chrome 通过浏览器执行带参数的本地应用程序

Google chrome 通过浏览器执行带参数的本地应用程序,google-chrome,firefox,browser,native,Google Chrome,Firefox,Browser,Native,在我的软件中,我依靠NPAPI通过浏览器直接启动本机应用程序,并向其传递参数。最近,所有浏览器都在积极地放弃对NPAPI的支持,而缺少该功能意味着该软件将陷入死胡同 我研究了做同样事情的备选方案,结果如下 本机消息传递 到目前为止,这是建议最多的方法,也很容易实现。此方法要求客户端系统通过更改系统中的注册表值向计算机注册(糟糕的用户体验)。我不能使用这种方法来完成所需的任务,因为这将意味着糟糕的用户体验。此外,扩展中的代码是可利用的,因为其中包含会话变量 自定义URL 同样,这种方法很好用,但注

在我的软件中,我依靠NPAPI通过浏览器直接启动本机应用程序,并向其传递参数。最近,所有浏览器都在积极地放弃对NPAPI的支持,而缺少该功能意味着该软件将陷入死胡同

我研究了做同样事情的备选方案,结果如下

  • 本机消息传递 到目前为止,这是建议最多的方法,也很容易实现。此方法要求客户端系统通过更改系统中的注册表值向计算机注册(糟糕的用户体验)。我不能使用这种方法来完成所需的任务,因为这将意味着糟糕的用户体验。此外,扩展中的代码是可利用的,因为其中包含会话变量

  • 自定义URL 同样,这种方法很好用,但注册协议是另一种糟糕的用户体验。此外,我不确定使用这种方法传递的变量


  • 有没有什么方法可以做到这一点,既不存在安全问题,又是良好的用户体验,并且使用一次性权限授予访问本地资源?

    因为这里没有正确的答案,我在我的软件上解决了这个问题,我想我会在这里写一个答案,作为以后遇到同样问题的人的参考

    浏览器强烈反对访问本机应用程序。您可能对您想要执行的任务有良好的意图,但一次访问可能会以多种方式被滥用,从而损害客户端计算机

    我找到了一个带有URI方案的临时解决方案,但我计划放弃需要我执行此操作的整个体系结构

    无论您找到什么解决方案,您编写的代码都有可能在一年内过时,因为浏览器正在慢慢停止对此类内容的支持

    因此,最好的选择是在设计中考虑一个解决方案,而不必这样做。它将帮助您在更长的时间内维护代码

    如果你还想做的话。那么下面的方法可能是最好的(仅限Windows,截至2017年3月21日)

  • 编写一个可执行文件(使用任何语言,例如:c++),以解释所需的参数,并使用特定命令提供给命令提示符
  • 例如,如果要使用特定文件打开记事本,则需要使用可执行文件向命令提示符提供以下命令

    notepad args[0]
    
    args[0]将是您通过浏览器传递的参数。如果notepad不在PATH变量中,请在完整路径中也提供该变量

  • 在客户端的注册表中注册自定义URI方案以启动此可执行文件。这将是一次性的,您可以提供一个注册表文件供客户端运行
  • 最后,您可以通过指定自定义URI和参数,通过浏览器链接调用本机应用程序。在记事本中,如果您的自定义URI是
    qwerty://
    ,则调用可能如下所示

    qwerty:// c:/Personal/temp.txt
    
    要知道,这种方法并非没有安全问题,您必须解决这些问题。我没有解决方案,因为我改变了设计,而不是临时解决方案