类别:前端知识
日期:2020-06-17 浏览:3780 评论:0
在做web应用的时候,经常会遇到在web中调用本地应用程序的问题,例如在web中点击一个按钮,然后打开自己写的或者别人的应用程序,经常在淘宝天猫购物的会发现当想跟客服沟通,点击阿里旺旺图标的时候会调用起客户端。QQ聊天也有这样效果的实现。
在IE中提供了ActiveXObject方法,于是在IE浏览器下可以这样写:
<script type="text/javascript"> function getJkMonitor(serviceInfo) { var Shell = new ActiveXObject("WScript.Shell"); try { //exe程序所在位置以及要传的参数 var kk = "C:\\KdMonitor\\KdMonitor.exe 888888"; var aa = Shell.Run(kk, 1, false); } catch (e) { alert("该可执行文件不存在"); } } //调用函数 getJkMonitor(); </script>
完整带参数
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebMianReport.aspx.cs" Inherits="WebReports.WebMianReport" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <style type="text/css"> .showandhidden { display:none; } .buju { text-align:center; } </style> <script type="text/javascript" language="javascript"> function GetRequest() { var url = location.search; //获取url中"?"符后的字串 var theRequest = new Object(); if (url.indexOf("?") != -1) { var str = url.substr(1); strs = str.split("&"); for (var i = 0; i < strs.length; i++) { theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]); } } return theRequest; } </script> <script type="text/javascript" language="javascript"> function Run(path) { var objShell = new ActiveXObject("wscript.shell"); //objShell.exec(path); objShell.run(path, 1, false); objShell = null; } function LaunchApp(exepath) { if (!document.all) { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); var file = window.Components.classes['@mozilla.org/file/local;1'].createInstance(Components.interfaces.nsILocalFile); file.initWithPath(exepath); var run = window.Components.classes['@mozilla.org/process/util;1'].createInstance(Components.interfaces.nsIProcess); run.init(file); var parameters = [""]; run.run(false, parameters, parameters.length); } else { var ws = new ActiveXObject("WScript.Shell"); ws.Exec(exepath); } } </script> <script type="text/javascript" language="javascript"> window.onload = function () { var url_list = GetRequest(); //Run(url_list["p"] + " " + url_list["l"] + " " + url_list["s"] + " " + url_list["p"]); Run(url_list["p"] + " " + url_list["l"] + " " + url_list["s"]); window.opener = null; window.open('', '_self'); window.close(); } </script> </head> <body > <form id="form1" runat="server"> <div style="height: 344px; width: 625px"> 即将跳转到表单打印页面,请稍候。。。。。。 </div> </form> </body> </html>
在让整个网页运行在IE下给人不是很好的体验,于是实现在其他浏览器下该多好。
其他浏览器的实现需要自定义注册表,注册表内容如下:
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\NetPosaVideo] "URL Protocol"="C:\\KdMonitor\\KdMonitor.exe" @="NetPosaVideoProtocol" [HKEY_CLASSES_ROOT\NetPosaVideo\DefaultIcon] @="C:\\KdMonitor\\KdMonitor.exe,1" [HKEY_CLASSES_ROOT\NetPosaVideo\shell] [HKEY_CLASSES_ROOT\NetPosaVideo\shell\open] [HKEY_CLASSES_ROOT\NetPosaVideo\shell\open\command] @="\"C:\\KdMonitor\\KdMonitor.exe\" \"%1\""
第一行是注册表工具的版本信息;
第二行中的NetPosaVideo就是在HKEY_CLASSES_ROOT下面添加一个NetPosaVideo树,其中NetPosaVideo的名称就对应着自定义URL Protocol的名称,在web中调用的时候需要这个名称;
第三行中的是指定应用程序的路径,注意:只能是exe的程序,每级目录之间用双反斜杠;
第四行是协议的名称;
第五行表示在Simu中再加一个分支,照抄;
第六行也是对应的程序路径,后面的1照抄;
第七、第八、第九行同第五行;
第十行也是将路径换成自己的程序路径,其中%1表示到参数。
将#之间的内容复制到一个txt文档中,修改后缀名为.reg,双击该文件即可直接导入到注册表中。
Html调用:
<a href="NetPosaVideo://888888">打开视频监控</a>
发表评论 / 取消回复