您好我是角色新手,我正在尝试开发一个网络应用程序。作为我的要求的一部分,我需要捕获整个桌面的屏幕截图,我认为我将无法使用基于Web的角度应用程序,因为javascript没有权限这样做。
后来,我发现桌面应用程序Electron允许用户完全捕获屏幕,因为它是桌面应用程序。我的问题是, 有没有办法在这两个平台之间切换?
比如说,用户正在浏览器中工作,他正在尝试截取屏幕截图,他使用使用angular开发的webapp。 一块蛋糕。现在,比方说,如果他想测试桌面上的其他应用程序,他需要打开桌面应用程序(Electron)。我怀疑有什么方法可以在这些平台之间切换?理想情况下,我的问题是可以通过Web应用程序中的按钮单击或事件打开桌面应用程序吗?
答案 0 :(得分:3)
这将非常困难,主要是出于安全原因。网站通常无法访问客户端的文件系统,也无法运行命令。这样做是为了防止随意网站弄乱您的计算机。
但是有几种方法可以做到这一点:
选项1:Javascript(hacky,不要使用它)
如this question中所述,如果您确切知道它在哪里,就有一种在客户端上执行文件的方法。它是通过使用file://
协议完成的,如下所示:
window.open('file://C:/path/to/your/file.exe');
要使用此方法,您可以尝试将Electron程序安装在C驱动器上的文件夹中。这样,你总能知道它在哪里。
我不建议使用此选项,我只是包含它,因为它有可能,所以你知道它是一个坏的。
选项2:撤消流程
一个好的第二个选择是改变你的应用程序的流程。不是从您的网络应用开始,更好的方法可能是从桌面应用开始,然后从那里打开网络应用。这可以使用标准做法完成,也更耐用。
This question详细介绍了如何使用NodeJS(Electron的一部分)在客户端浏览器中打开网站。
选项3:使用自定义URI方案
第三个也是最困难的选择是在客户端的操作系统中注册自己的URI方案。就像http://
使您的计算机上网并且file://
使其进入硬盘一样,您可以制定自己的方案/协议来执行您想要的操作。您可以在操作系统中注册myapp://
,并在有人点击此类链接后让其执行您的应用。然而,这要复杂得多,并且在所有操作系统上的工作方式都不同。您必须为此创建特定于系统的安装程序。有关如何在Windows can be found here上执行此操作的详细信息。
<强>结论强>
这取决于具体情况,但根据您告诉我的内容,您的重点是安全性。如果可能,最好的方法似乎是选项2 。这样,您可以从桌面应用开始,并在需要时打开网站的常规URL。此URL已公开,因此不会引入其他漏洞。自定义URI解决方案非常简洁,但引入了两种可能性:
myapp://data
,则其他网站可能会尝试将格式错误的数据传递给您的应用,以试图破坏它。选项2也存在这个问题,因为它是面向公众的网站,但这是您唯一关心的问题。选择选项3,你将有2个攻击向量而不是一个。但是,最后,它确实是一个偏好的问题。使用自定义URI方案可以安全地完成,因此使用该解决方案非常好。然而,这将是更多的工作。