第45篇 js操作打开本地程序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第45篇 js操作打开本地程序相关的知识,希望对你有一定的参考价值。
原文地址:http://blog.laofu.online/2017/06/10/how-js-controlApp/
背景
假设有这样一个产品,一个web和一个winform客户端,在客户在web的网页上面点击启动客户端来处理,这个时候开始调用本地的客户端,来完成指定的工作。这种场景在日常的上网中也比较常见,如使用迅雷下载。当然实现的方式也有很多种,今天我来演示一种用监控Http请求来实现这个功能,思路如下:
HttpListener
对于上面的分析,最重要的功能虽实现对Http的监控,而.net中已经封装了我们的需求,下面看下如何具体的实现:
static void Main(string[] args) { HttpListener listerner = new HttpListener(); try { listerner.AuthenticationSchemes = AuthenticationSchemes.Anonymous;//指定身份验证 Anonymous匿名访问 listerner.Prefixes.Add("http://localhost:8080/Service/"); listerner.Start(); } catch (Exception ex) { Console.WriteLine("无法启动监视:" + ex.Message); } Task.Factory.StartNew(() => //使用一个线程对监听 { while (true) { HttpListenerContext ctx = listerner.GetContext(); Task.Factory.StartNew(TaskProc, ctx);//回调函数,开启新线程进行调用,不影响下次监听 } }); Console.ReadKey(); }
实现请求的响应
现在我们可以拿到请求的上下文的信息ctx,先定义一个参数的格式,简单的定义如下:
public class ReciveInfo { public string path { get; set; }//应用程序所在的路径 public string name { get; set; }//应用程序名称 }
下面对ctx的Response数据进行填写.
static void TaskProc(object o) { HttpListenerContext ctx = (HttpListenerContext)o; StreamWriter writer = new StreamWriter(ctx.Response.OutputStream, Encoding.UTF8); try { //接收POST参数 Stream stream = ctx.Request.InputStream; StreamReader reader = new StreamReader(stream, Encoding.UTF8); String body = HttpUtility.UrlDecode(reader.ReadToEnd()); Console.WriteLine(body); var reciveInfo = Json.JsonParser.Deserialize<ReciveInfo>(body); Process.Start(reciveInfo.path); ctx.Response.Headers.Add("Access-Control-Allow-Origin","*"); //防止出现跨域的问题错误 ctx.Response.StatusCode = 200; //设置返回给客服端http状态代码 writer.Write(reciveInfo.name + "启动成功"); } catch (ArgumentException e) { ctx.Response.StatusCode = 500; writer.Write("参数有误:" + e.Message); } catch (Exception e) { ctx.Response.StatusCode = 500; writer.Write("程序异常:" + e.Message); } finally { writer.Close(); ctx.Response.Close(); } }
测试
在测试中我在js中启动我电脑中的QQ,具体的代码如下:
<button id="btnQQ"> start QQ</button> <script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script> <script type="text/javascript"> $(function() { $("#btnQQ").click(function() { $.ajax({ type: "POST", url: "http://localhost:8080/Service", dataType: "json", data: JSON.stringify({ path: "D:/Program Files/Tencent/QQ/Bin/QQScLauncher.exe", name: "qq" }) }); }); }); </script>
启动后,运行截图如下:
以上是关于第45篇 js操作打开本地程序的主要内容,如果未能解决你的问题,请参考以下文章
重学Node.js 第1&2篇本地搭建Node环境并起RESTful Api服务