我用JSP为我们的客户构建了一个系统。现在我想在用户许可的情况下收集客户信息。以下信息将从我们的客户处获得。
1. UUID 2. Hard disk serial number 3.Ip Address 4. MAC ADdress 5.PC AND OS info
目前这是通过 activeX 对象完成的。但该系统只能在Internet Explorer浏览器中运行。我想更改系统,使其独立于浏览器。
我想到了几种架构。让我简要讨论一下这些架构:
第一个架构(通过 JavaScript):
当客户访问我们的网页时,将打开一个弹出窗口,说明 ,“您允许运行这个脚本吗?”。如果用户允许,则脚本将驻留在客户端 pc 中。该脚本将负责获取有关客户端电脑的信息并将信息发送到我们的服务器。 您始终可以认为客户端将授予运行脚本的权限,因为我们将向客户端发出运行脚本的指示。
第二种架构(通过jar文件)
jar 文件将驻留在每台客户端 PC 中。该文件将负责从客户端电脑获取信息并将信息发送到我们的服务器。每个客户都会得到一个软件。安装该软件后,将安装 jre 并且 jar 文件将驻留在特定目录中。 在客户端电脑中驻留 jar 文件的另一种方法,是否可以在客户端访问我们的 Web 应用程序时将 jar 文件推送到客户端电脑?我们希望得到他们的许可。
第三种架构(通过dll文件):
用 C# 编写的 dll 文件将驻留在客户端 pc 中。该dll文件将负责从客户端电脑获取信息。当客户第一次访问我们的网络应用程序时,他们会询问是否要授予运行该dll的权限?如果他们给予许可,那么该dll文件将保留在客户端电脑上,并负责提供客户端电脑的信息。
上述架构有意义吗?您能告诉我上述架构的一些优点和缺点吗?如果上述架构/方法无法完成我必须完成的任务,我可以采取哪些步骤来获取客户信息?
我在 google 上研究了很多关于这个主题的内容。据我所知,现代浏览器限制从客户端获取信息。但我想在获得客户宝贵许可的情况下获取他们的信息。
我尝试过的:
我尝试使用几个js库来做到这一点,例如clientjs、nodejs。但clientjs无法提供一些信息,例如UUID、硬盘序列号。我写了一个java代码(桌面环境),它可以获取电脑的所有信息。但我无法从我的 jsp 页面调用此代码。我还能够编写一个 C# 代码,它可以提供客户端信息的输出。但我无法从我的 jsp 页面调用它。
最后一点:
希望我要说的大家都清楚。请帮助我完成这项任务,或者至少给我一些关于如何完成这项任务的想法/建议!
最后要提醒大家的是,我们的系统正在收集使用 ActiveX 的用户信息。这仅与 IE 绑定(bind)。我只是想独立于浏览器。
最佳答案
您不能只在浏览器中执行 dll 方法(这样做是出于安全原因)。为了在浏览器中执行一些已编译的代码,您必须使用插件。
此问题有多种解决方法。经过一些链接后,似乎可以通过以下选项来实现。
选项 1:
- Firefox 允许您创建 XPI 扩展(又名“插件”)
- Chrome 有扩展程序 Calling a .dll function from a html page that runs on chrome and firefox
选项 2:
为那些使用 NPAPI 编写的浏览器创建插件。 How to write a browser plugin?
选项 3:
编写签名的小程序来调用从 html 或任何 Web 应用程序运行的 dll。它几乎可以在所有浏览器上运行。这是示例的链接。
Escape the sandbox: Access native methods from an applet
选项 4:
使用 EdgeJS 可以完成相同的任务。您可以在 Call Function from DLL returned in front-end javascript (load dll in clientside javascript) 找到答案。 诀窍是在 V8 和 CLR 之间编码函数,并在事件触发时将消息发送到 javascript。
Call Function from DLL loaded in front-end javascript (load dll in clientside javascript)
选项 5:
构建一个 C# 应用程序(如果您使用 .NET,则仅适用于 Windows;如果您仅使用 CoreCLR,则适用于所有平台),该应用程序监听滑动并触发事件以在所有连接的 Websocket 上发送数据。
Need to call client side DLL from browser
选项 6:
您可以使用 C# 编写客户端应用程序,连接到 JS websocket,然后传输数据。 WebSocket 可以检查特定的数据 block ,并按照您想要的方式处理它。
我按照我在使用指纹扫描仪的项目中描述的方式使用它。效果很好!如果您添加一点加密货币,那就更好了!
Call Function from DLL loaded in front-end javascript
选项 7:
- 创建一个可以安装在用户计算机上的应用程序。
- 在此应用程序中运行嵌入式 HTTP 服务器。
- 确保嵌入式 HTTP 服务器返回 CORS header 。
- 在 HTTP 服务器 API 中写入您的逻辑和端点。
- 在页面上使用 JS 来查询嵌入式 HTTP 服务器(如果它运行)。
最后一句话:
ActiveX只是在IE中实现浏览器插件的一种方法。所有其他浏览器使用不同的插件接口(interface)。 然后,如果用户将在浏览器中安装您的插件 - 该插件将从 JS 中可用,您可以使用它来执行 dll 中的某些功能。
关于javascript - 通过JavaScript或者dll或者jar文件获取客户端信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46387516/