如何从浏览器访问客户端 PC 上的设备
Posted
技术标签:
【中文标题】如何从浏览器访问客户端 PC 上的设备【英文标题】:How to access devices on a client PC from a browser 【发布时间】:2010-02-01 18:02:36 【问题描述】:从浏览器访问客户端 PC 上的设备(条形码阅读器、扫描仪等)的各种方法有哪些?我意识到我的用户可能需要一个插件。这些设备可能具有特定于其设备的 API;如果可用,我想利用他们的 API(可能是 Java,可能是 C,可能是命令行)。
【问题讨论】:
我见过的每个条码扫描器都可以用作键盘,因此无需额外设置即可在任何地方使用键盘。 这些设备更像是扫描仪而不是条形码阅读器。 【参考方案1】:已签名 Java 小程序可以独立于平台访问大多数内容。用户必须安装 Java,并且必须允许签名的小程序运行。
如果您向NSAPI 编写插件,一旦他们安装了它,您就可以访问用户可以访问的任何内容。当然,他们必须安装插件。
Flash 提供了对设备的大量访问。
【讨论】:
【参考方案2】:这不是一件小事,并且没有标准化的 API(可能在仅限于 Internet Explorer 的 JScript/ActiveX 领域除外)。
要通过 TWAIN 界面访问扫描仪,请查看 this question 了解我知道的所有普遍可用的选项。
大多数其他事情将归结为自定义编程的 Active-X 和其他插件。我看过 SO 上讨论的商业条码扫描器插件,但现在找不到问题。
【讨论】:
【参考方案3】:可以在键盘和 PC 之间插入许多条码阅读器,因此扫描的条码直接进入键盘缓冲区。其他设备要么插入串行端口,要么具有模拟串行端口的驱动程序。以下 python 代码会将数据从真实或虚拟 COM 端口复制到活动窗口的键盘缓冲区。 COM 端口号是硬编码的,但很容易更改。
import serial
import SendKeys
ser = serial.Serial(2)
print ser.portstr
while 1: # exit loop when ctrl/c pressed
line = ""
while 1:
char = ser.read()
if char == "\r": break
line = line + char
print line
SendKeys.SendKeys(line, 0)
ser.close()
【讨论】:
【参考方案4】:根据您要执行的操作,Silverlight 和 Adobe 在此领域的能力都有限。网络摄像头、Silverlight 4.0 中的打印等。但是,这并非易事。 Silverlight 4.0 和 Flash 都支持条码扫描。
【讨论】:
以上是关于如何从浏览器访问客户端 PC 上的设备的主要内容,如果未能解决你的问题,请参考以下文章
从通用浏览器访问智能卡的架构?或者:如何弥合从浏览器到 PC/SC 堆栈的差距?
从 Windows Virtual PC XP 模式访问托管在 Windows 7 上的网站