Js如何调用本地应用程序

JavaScript017

Js如何调用本地应用程序,第1张

一般情况下,浏览器中是无法直接和本机的其他的程序进行交互的,在IE中,我们可以通过ActiveX对象的方式进行。但是这个方式只适用于IE浏览器,另一种比较通用的方式便是URL协议的方式,我们将某种URL的协议注册给某个程序来进行处理,比如将tencent://这样的协议注册给QQ程序来进行处理,当浏览器需要访问这样的协议的时候就转给QQ程序进行处理。这种URL协议的方式是可以跨平台的,比如在Windows上你需要添加注册表项。

首先先看看js应该如何调用qq客户端。

window .open(" tencent://message/?uin=346915968 ")

window.open顾名思义,打开。Tencent就不用多说了吧 BAT之T。上述能直接打开qq帐号对应的对话框。由此可以知道网页上的在线客服功能是如何实现了吧。

那要是不需要打开对话框,就想要登陆qq应该如何实现呢?很简单呀:

window .open(" tencent://message/?uin=qq ") 不过调用应用这种跟黑客没什么差别的行为,浏览器一般都是禁止的,

选择允许后,

启动应用,qq客户端就会被调起。

为什么说这个呢,老板又给了个需求,想让调起qq客户端一样,想通过演示页面的一个按钮,调起售票系统的各种程序...

什么都不说了,先看看什么是自定义协议。

Pluggable Protocol,又叫URL Protocol,有时会叫Shell命令,通用的Protocol有http、ftp、mailto等,这些都是windows安装时自带的协议。

接着也实现一个简单的自己的自定义协议吧。

1,运行window,输入regedit打开注册表。 在HKEY_CLASSES_ROOT下面建一个自己起的名字的表。

用如下格式把各项值添上:

js打开qq音乐.exe

启动应用

end.

<button onclick="wsh = new ActiveXObject('WScript.Shell')wsh.Run('file:///C:/WINDOWS/system32/cmd.exe')">这是打开CMD的 </button>

把上面CMD的路径换为QQ的路径即可,如在我的电脑上打开QQ就是

<button onclick="wsh = new ActiveXObject('WScript.Shell')wsh.Run('file:///D:/Program%20Files/Tencent/qq/bin/qq.exe')">这是打开qq的 </button>

方法/步骤

准备工作

在正式接入之前你需要了解以下名词的含义:

1. appid :应用的唯一标识。在OAuth2.0认证过程中,appid的值即为oauth_consumer_key的值。

2. appkey:appid对应的密钥,访问用户资源时用来验证应用的合法性。在OAuth2.0认证过程中,appkey的值即为oauth_consumer_secret的值。

3. redirecturl:成功授权后的回调地址,必须是注册appid时填写的主域名下的地址,建议设置为网站首页或网站的用户中心。注意需要将url进行URLEncode。

4. access token:用来判断用户在本网站上的登录状态,具有3个月有效期,用户再次登录时自动刷新。

5. openid:是此网站上唯一对应用户身份的标识,网站可将此ID进行存储便于用户下次登录时辨识其身份,或将其与用户在网站上的原有帐号进行绑定。

第一步

要接入QQ登录,必不可少的是appid和appkey,通过申请接入QQ登录,按照相应步骤操作即可轻松获得,在此不做赘述。

第二步

在需要放置QQ登录按钮的页面加入下面SCRIPT代码:

<script type="text/javascript" src="http://qzonestyle.gtimg.cn/qzone/openapi/qc_loader.js" data-appid="APPID" data-redirecturi="REDIRECTURI" charset="utf-8"></script>

PS:APPID 和 REDIRECTURI 换成第一步申请所得到的对应内容,REDIRECTURI 就是登录之后返回的回调地址,在申请页面自己填写,一般写网站主域名即可。注意:回调地址必须以http或https开头。

第三步

在页面放置一个元素节点用来展现登录按钮,并且指定其ID,如:

<div id="qq"></div>

然后在页面加入如下SCRIPT:

<script type="text/javascript">

QC.Login({

btnId:"qq"    //插入按钮的节点id

})

</script>

这时就可以在页面看到如下效果:

如对这个展示效果不满意,也可以自定义登录按钮。

第四步

在  REDIRECTURI 即回调地址页面加入如下SCRIPT:

<script type="text/javascript"

src="http://qzonestyle.gtimg.cn/qzone/openapi/qc_loader.js" charset="utf-8" data-callback="true"></script>

另外:官方说法如果回调地址页与加入QQ登录按钮是同一个页面,则只需要引用一次脚本文件。如果理解不了这种官方说法,可以在第一步的脚本中加入data-callback="true"属性,而忽略第四步,前提是回调地址页与加入QQ登录按钮的页面是同一个页面。

第五步

因为JS SDK封装了获取Access Token以及OpenID的方法,因此开发者不需要用开发代码进行获取,直接调用QQ登录OpenAPI即可。

调用OpenAPI时,请统一遵循下述调用方式:

QC.api(api, paras, fmt, method)

参数说明:

最后

提供一种代码接入思路,仅供参考:

QC.api("get_user_info", {}) //get_user_info是API参数

//指定接口访问成功的接收函数,s为成功返回Response对象

     .success(function (s) {

         //成功回调,通过s.data获取OpenAPI的返回数据

         nick = s.data.nickname//获得昵称

         headurl = s.data.figureurl_qq_1//获得头像

         if (QC.Login.check()) {//判断是否登录

             QC.Login.getMe(function (openId, accessToken) { //这里可以得到openId和accessToken

                 //下面可以调用自己的保存方法

                 ……

             })

         }

     })

//指定接口访问失败的接收函数,f为失败返回Response对象

     .error(function (f) {

         //失败回调

         alert("获取用户信息失败!")

     })

 ////指定接口完成请求后的接收函数,c为完成请求返回Response对象

 //.complete(function (c) {

 //    //完成请求回调

 //    alert("获取用户信息完成!")

 //})