organic

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

 由于网页及浏览器的各种限制,很多事情我们通过js等编码并不能达到我们想要的目的,我们需要调起本地执行程序来帮助我们做一些更强大的事情,这时候问题来了,
如何才能调起我们本地程序?下面列出目前可用的几种方法及其缺陷(主要以IE和Chrome浏览器为例)。
1、使用网页控件
1.1 IE浏览器
1.1.1        IE中可使用ActiveX控件调用本地控件,也可通过BHO调用,当然BHO和ActiveX控件本质都是一样的,只是在表现形式上不同,ActiveX控件和BHO都可执行系统API,因
而调用CreateProcess或者ShellExecute都可调起本地程序。
1.1.2        缺点
1.1.2.1        在vista以上系统中有了UAC管理,对进程权限进行了分级,IE8以上版本对从IE启动的程序都是低权限的,这样启动的进程能做的事情还是有限,需要进行提权操作
1.1.2.2        IE8以上系统中默认会提示用户是否使用该控件

1.2 非IE浏览器
1.2.1        Chromium内核及Webkit内核等非IE内核浏览器中,可以使用NPAPI Plugin,NPAPI Plugin也可以调用系统API调起本地程序

1.2.2        缺点
1.2.2.1        Chrome 37版本默认会拦截NPAPI Plugin(可通过配置策略暂时解决)

1.2.2.2        Chrome已宣布将抛弃NPAPI Plugin,转向自己的PPAPP Plugin,当然火狐、搜狗浏览器、360浏览器等还是支持的

1.3 Chrome中的PPAPI Plugin
1.3.1        Chrome计划打造自己的NativeClient平台已执行本地代码,但其NaCl和PNaCl是在chrome沙箱中运行,不能执行本地API,也禁止调用本地程序,故暂不可用
1.3.2        PPAPI是用来替代NPAPI的Plugin,Chrome自带的flash插件已换成PPAPI了(Chrome为了抛弃NPAPI可是下了血本的哇),PPAPI类似NPAPI,也可以调用系统API调起本地程序

1.3.3        PPAPI的缺点
1.3.3.1        目前Chrome对PPAPI支持不是很好,每次使用PPAPI需带Plugin Type参数启动Chrome进行注册,下次不带参数启动Chrome就不认了,很是蛋疼
1.3.3.2        不能使用所有系统API,只能调用Chrome允许的,很不幸启动本地程序的API Chrome没给发良民证,如要使用需关闭sandbox

2、使用扩展
    在Chrome中,还可以使用扩展(Extension),向Chrome传递消息来调起本地进程,但扩展需要在Chrome商店中让用户点击后才能使用,本地安装需切换到开发者模式手动
设置,流程较繁琐。
    IE中没有扩展这个概念,也无此途径,其他浏览器也有类似扩展的概念,具体未详细研究。

3、通过协议
3.1        当一个用户点击一个注册了的自定义URL协议的链接后,浏览器会启动注册的URL协议的处理器,该方法所有浏览器都支持,我们通常见的从网页中启动QQ就是用的这种方法。


3.2        缺点
3.2.1        启动时会有警告提示,Chrome中可通过修改的Local State的配置文件关闭提示

以上3类从网页中启动的本地程序就介绍完了,如果大家欲了解各种方法是如何实现的,请继续关注《网页中调起本地程序系列

posted on 2015-05-15 23:28  organic  阅读(939)  评论(0编辑  收藏  举报