在我的软件中,我依靠NPAPI通过浏览器直接启动本机应用程序并传递参数。最近,所有浏览器都在大力放弃对NPAPI的支持,缺乏该功能意味着该软件的死胡同。
我研究了做同样事情的替代方案,并得到了以下结果。
原生邮件 到目前为止最推荐的方法,也很容易实现。此方法要求客户端系统通过更改系统中的注册表值来注册计算机(可怕的用户体验)。我无法使用此方法执行所需任务,因为这意味着糟糕的用户体验。此外,扩展中的代码是可利用的,因为它中包含会话变量。
自定义网址 再一种好用的方法,但注册协议是另一种糟糕的用户体验。而且,我不确定使用此方法传递的变量。
有没有办法实现这一点,没有安全问题,是一个良好的用户体验,并使用一次性权限授予访问本地资源?
答案 0 :(得分:0)
由于这里没有正确的答案,我在我的软件上解决了这个问题,我想我会在这里写一个答案,作为一个坚持同一过程的人的未来参考。
浏览器严重依赖访问本机应用程序。您可能对您想要执行的任务有良好的意图,但是可以通过多种方式滥用一次访问来损害客户端计算机。
我找到了一个带有URI方案的临时解决方案,但我打算放弃要求我执行此操作的整个架构。
无论你找到什么解决方案,你编写的代码很可能会在一年内过时,因为浏览器正逐渐放弃对这类内容的支持。
因此,最好的选择是将设计中的解决方案视为您不必执行此操作的地方。它可以帮助您在更长的时间内维护代码。
如果你还想这样做的话。然后,以下方式可能是最好的(仅限Windows,截至2017年3月21日)。
例如,如果要使用特定文件打开记事本,则需要使用可执行文件向命令提示符提供以下命令
notepad args[0]
args [0]将是您通过浏览器传递的参数。如果记事本不在PATH变量中,请在完整路径中提供。
最后,您可以通过指定自定义URI和参数,通过浏览器链接调用本机应用程序。在记事本案例中,如果您的自定义URI为qwerty://
,则调用可能看起来像
qwerty:// c:/Personal/temp.txt
请注意,此方法并非没有安全问题,您必须解决这些问题。当我改变设计而不是寻求临时解决方案时,我没有解决方案。