zoukankan      html  css  js  c++  java
  • 网页中调起本地程序系列——简介篇

     由于网页及浏览器的各种限制,很多事情我们通过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类从网页中启动的本地程序就介绍完了,如果大家欲了解各种方法是如何实现的,请继续关注《网页中调起本地程序系列

    本文为博主原创文章,如需转载请说明转至http://www.cnblogs.com/organic/
  • 相关阅读:
    作业7-英文词频统计预备,组合数据类型练习
    作业6-凯撒编码、GDP格式化输出、九九乘法表
    作业5-字符串操作
    作业3-turtle库基础练习
    作业2-Python基础练习
    理解管理信息系统
    Git-git rebase详解
    C语言中基本的数据类型
    读取配置文件的C语言接口实现
    Linux之异步IO机制分析
  • 原文地址:https://www.cnblogs.com/organic/p/5005661.html
Copyright © 2011-2022 走看看