当前位置:首页 > 开发 > Web前端 > 前端 > 正文

像打开QQ和迅雷一样在网站中点击打开本地的应用

发表于: 2015-01-07   作者:BlueSkator   来源:转载   浏览次数:
摘要:   例子: 说到单点登录,往往是和Portal(门户)是离不开的。通常企业中会有许多应用,WEB的或CS的。而做Portal的时候往往是做成WEB的。这时候,用户登录Portal后,如何从Portal启动本地的CS程序,就成为需要解决的问题。不知道大家是如何解决的,我的做法是,自己实现一个协议(就象迅雷/电驴/网络蚂蚁那样),在Portal上实现一个形如协议名称://应用名称/作业?

 

例子:

说到单点登录,往往是和Portal(门户)是离不开的。通常企业中会有许多应用,WEB的或CS的。而做Portal的时候往往是做成WEB的。这时候,用户登录Portal后,如何从Portal启动本地的CS程序,就成为需要解决的问题。
不知道大家是如何解决的,我的做法是,自己实现一个协议(就象迅雷/电驴/网络蚂蚁那样),在Portal上实现一个形如
协议名称://应用名称/作业?action=动作&param1=参数1&param2=参数2…
这样的例子可能是(我们协议名是用公司简称,这里我就用foo):
<a href=”foo://erp/order?action=query&owner=hydonlee”>我的订单</a>
通过这样的设计,让浏览器象处理http协议的链接一样,把请示发送给我们的应用。
那如何让浏览器将这个链接发送给我们的协议处理器呢?这就需要向系统中注册一下(Windows下),注册表如下:
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\foo]
@="URL: foo Application 协议"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\foo\DefaultIcon]
@="d:\\workspace\\fooPortal\\bin\\client\\foo.protocolhandler.exe,1"

[HKEY_CLASSES_ROOT\foo\shell]

[HKEY_CLASSES_ROOT\foo\shell\open]

[HKEY_CLASSES_ROOT\foo\shell\open\command]
@="\"d:\\workspace\\fooPortal\\bin\\client\\foo.protocolhandler.exe\" \"%1\""
怎么样?是不是很简单?其实将这个加入注册表之后,你可以开始->运行,输入:foo://test/ 回车,来测试你的协议处理器了!windows系统会把网址作为参数提供给命令行。
注册协议处理器的C#代码如下,我是写在协议处理器的类中的:
private void FooProtocolRegister() {
// copyright(c) hydonlee, 转载请注明原址
RegistryKey cr = Registry.ClassesRoot;

RegistryKey Fookey = cr.CreateSubKey("Foo");

//添加Foo键
Fookey.SetValue("", "URL: Foo Application 协议");
Fookey.SetValue("URL Protocol", "");

//添加DefaultIcon
RegistryKey iconKey = Fookey.CreateSubKey("DefaultIcon");
iconKey.SetValue("", string.Format("{0},1", Application.ExecutablePath.ToLowerInvariant()));

//添加Shell Key
RegistryKey shellKey = Fookey.CreateSubKey("shell");
RegistryKey openKey = shellKey.CreateSubKey("open");
RegistryKey commandKey = openKey.CreateSubKey("command");
commandKey.SetValue("", string.Format("\"{0}\" \"%1\"", Application.ExecutablePath.ToLowerInvariant()));

Fookey.Close();
}
这样,由浏览器的链接,已经传递到我们本地的应用中了,剩下的事情就比较简单了。协议处理器分析这个地址,呼叫相应的作业插件,并将参数传入。
简单来说就是:通过协议地址模型,Portal生成链接->浏览器发起请求->协议处理器分派-->各应用插件启动作业

 

Activity X插件调用

<script type="text/javascript"> 
<!-- 
function runExecutable() 
{ 
var executableFullPath = 'F:\\ZK\\DownLoadFile\\YodaoDict.exe'; 

try 
{ 
var shellActiveXObject = new ActiveXObject("WScript.Shell"); 

if ( !shellActiveXObject ) 
{ 
alert('Could not get reference to WScript.Shell'); 
return; 
} 

shellActiveXObject.Run(executableFullPath, 1, false); 
shellActiveXObject = null; 
} 
catch (errorObject) 
{ 
alert('Error:\n' + errorObject.message); 
} 
} 
// --> 
</script> 
<input type="button" onclick="runExecutable()" value="打开客户端程序"> 



 

像打开QQ和迅雷一样在网站中点击打开本地的应用

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
首先当然要在右击链接时的显示的菜单中添加数据项.添加的方法如下. 1.1 开始菜单-->运行-->用
出现的问题: 正常启动电脑后,我双击桌面上的一个idw文件,默认使用 Inventor 2013 打开该格式的文
可以在下面这个链接上找到视频和安装方法: http://planet.linuxdeepin.com/2012/03/02/deepin-scro
NBA 2014-15 赛季开始,第一天,火箭队以 108 比 90 大胜湖人。看不了直播,早点知道结果也能让心里
ToyBricks ToyBricks(积木)(以下简称ToyBricks)是基于面向积木方法论构建的、面向Java开发(尤
ToyBricks ToyBricks(积木)(以下简称ToyBricks)是基于面向积木方法论 构建的、面向Java开发(尤
iPhone应用多如牛毛,找到一个能满足自己需求的应用像是大海里捞针。一些帮助人们发现应用的工具应
转载请注明出处:http://blog.csdn.net/sinyu890807/article/details/8769904 首先题外话,今天早上
ZAKER 是一款国内开发商开发的很棒的苹果 iOS 平台上的阅读类应用(免费 App)。“借鉴”了美国的先
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8769904 首先题外话,今天早上
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号