不是真正的答案,虽然太长了,无法发表评论。
在我看来,这就像您希望从浏览器调用本机代码一样。这不会让很多人满意,尽管我知道只有一种方法可以实现这一目标。它涉及Internet Explorer和COM服务器(activeX)。IE 可以创建 activeX 程序的实例,您需要编写该实例。
然后,此 activeX 可以向供应商提供的 DLL 发出命令。但这样做的问题是,如果我坐在其中一个终端上并有键盘,我也可以打开抽屉。您还需要一种方法来传达从服务器到客户端的打开抽屉的意图。我想你可以使用WebSockets来维护客户端和服务器之间的通信通道,通过它发出打开抽屉的意图。
这在锁定的情况下可能是可以的,尽管有各种安全问题,我没有考虑过,也没有在这里提到过。
回顾一下,这里有一个可能的解决方案:
- 在客户端和服务器之间建立 WebSocket 连接。
- 通过此通道从服务器向客户端浏览器发出命令。
- 在浏览器中捕获此命令,然后创建一个 ActiveX 对象。
- 使用javascript,告诉这个activeX对象打开抽屉。
- 在 ActiveX 对象中,通过调用供应商提供的 DLL 中的相应函数来响应打开抽屉的请求。
我个人对实现这一点感到有点不安(并希望得到丰厚的报酬)。
顺便说一句,您可以以这种方式控制MS Office等示例 - 允许您从浏览器中创建电子表格/ word doc / etc,使用用户输入的信息填充新文档。
这是我18个月前为一个项目写的JS文件,它控制着Excel。
//
// jsExcelObj.js
// 28/08/2012
// the (only Excel) app instance - we only want to have 1
// **** don't access this variable directly ****
var jsExcelApp = null;
/*****************************************************************************
Excel class
*****************************************************************************/
function startExcel()
{
jsExcelApp = new ActiveXObject("Excel.Application");
}
function stopExcel()
{
jsExcelApp.Quit();
delete(jsExcelApp);
jsExcelApp = null;
}
function jsExcelWorkbook(filename)
{
if (jsExcelApp == null)
startExcel(); //jsExcelApp = new ActiveXObject("Excel.Application");
this.mFilename = filename;
this.mExcelSheet = null;
this.mWorkbook = jsExcelApp.Workbooks.Open(filename);
this.close = function()
{
this.mWorkbook.Close(false);
this.mFilename = null;
this.mExcelSheet = null;
this.mWorkbook = null;
}
this.open = function(filename)
{
if (jsExcelApp == null)
startExcel();
if (this.mFilename != null)
this.close();
this.mFilename = filename;
this.mExcelSheet = null;
this.mWorkbook = jsExcelApp.Workbooks.Open(filename);
}
this.setSheet = function(sheetName)
{
this.mExcelSheet = this.mWorkbook.Worksheets(sheetName);
}
this.getCellValue = function(column, row)
{
return this.mExcelSheet.Cells(row, column).value;
}
// returns the cells background colour as a html hex color value - e.g "7a554a"
this.getCellColor = function(column, row)
{
var hexStrVel, r, g, b, decNum;
decNum = this.mExcelSheet.Cells(row, column).Interior.Color;
// get a hexidecimal string representation of the number
hexStrVal = decNum.toString(16);
// pad to 6 bytes long
while (hexStrVal.length < 6)
{
hexStrVal = "0" + hexStrVal;
}
// extract the 3 components
r = hexStrVal.substr(4,2);
g = hexStrVal.substr(2,2);
b = hexStrVal.substr(0,2);
return r+g+b; // return them in reverse order
}
}
使用它很简单:
<script src='script/jsExcelObj.js'></script>
<script>
var fullyQualifiedPathToExcelWorkbook = "C:/someFile.xls";
var mExcel = new jsExcelWorkbook(fullyQualifiedPathToExcelWorkbook);
mExcel.setSheet("Sheet1");
var col1Row1 = mExcel.getCellValue(1, 1);
alert(col1Row1);
mExcel.close();
stopExcel();
</script>
我有点好奇,你会得到这个问题的其他答案。从我能想到的每一个角度来看,这听起来像是一次穿越雷区的长途跋涉。
我会非常认真地考虑使用c ++实现我自己的服务器/客户端架构,而忘记使用HTML / PHP。这可能是因为我知道的太少,也可能是因为我知道的足够多,可以看到危险 - 我不知道!