牛牛截图,全球最专业的组件化截图控件!

从控件开发角度看当前浏览器之乱象

发布日期:2015-10-24
作者: 管理员

浏览器带给我们的便利实在太大了,看网页、学知识,无时无刻不依赖着浏览器。但在一些场景下,浏览器默认的功能已经不能满足的时候[比如访问本地文件],我们就需要对浏览器进行扩展,这就涉及到浏览器控件了。

当前的互联网下,浏览器种类繁多,以下我们将从控件开发的角度来谈谈各种浏览器的不同,以及在不同浏览器下开发控[插]件的注意事项。

从开发控件的角度看,浏览器基本上可分为IE浏览器和非IE浏览器;在IE浏览器中,开发控件一般使用ActiveX形式,而在非IE浏览器中,一般采用NPAPI的方式;但现在就没有这么幸运了,浏览器开发商为了利益,逐步抛弃了原来支持的控件方式,这使得我们在浏览器上使用控件将会越来越困难。

今天我们不讨论具体浏览器下如何开发控件,所以不会涉及到示例代码,具体如下:

一:IE浏览器

IE浏览器目前应该还是用户最多的浏览器,包含IE浏览器本身以及各种以IE内核为基础的软件应用。 这里提两点建议:

1. IE浏览器分为32位及64位版本

虽然在IE9以后,理论IE都将以32位进程来加载ACTIVEX控件,但在实际测试中,有时候还是会是64位进程来加载;所以如果想完全兼容IE浏览器,你最好同时提供32及64位版本;32位与64位版本的控件,请保持ID、标识一致,这样在JS中加载控件时,就不用写两套了。
建议在页面中使用如下的形式加载控件:

<object id="niuniuCapture" type="application/x-niuniuwebcapture" width="0" height="0">
<param name="onload" value="pluginLoaded" /></object> 

2.在页面中加载控件的方式

不建议使用cab包的形式;同时建议使用EXE安装包的形式来提供控件安装,原因如下:
1). 使用cab包,在安装控件时,默认需要管理员权限,这将导致控件经常安装不上,不利于控件在特定场景下的使用;另外cab包安装后需要页面刷新,这也是不方便的地方;

2). 使用exe安装包,利用当前的各种开源的安装包制作工具,可以非常便利的制作出简单、美观、要求最低权限的安装包。

如何在非IE浏览器中使用ACTIVEX控件呢? 这并非不可能,在网上看到一篇文章,如果你想在支持NPAPI的浏览器中使用ACTIVEX,你可以尝试一下NPACTIVEX。

二:FireFox浏览器

FireFox浏览器应该可以说是支持NPAPI插件的代表了,想要开发NPAPI插件,可以去下载FireFox的插件开发源码包来实现,有完整的示例。【这样的插件同样适用于在Chrome内核的浏览器中使用】 主要注意如下两点:
1. 要想让浏览器能加载此插件,需要向注册表中写入注册表项,类似如下[注意区分32还是64位系统]:

Windows Registry Editor Version 5.00 
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\MozillaPlugins\@niuniu.com/npcaptrue]
"Path"="c:\\testcapture\\npcapture.dll"

2.FireFox浏览器也在陆续减少对NPAPI的支持,目前已经在限制NPAPI插件,默认将插件设置成了禁用状态,需要手动开启;于2016年底,FireFox将彻底放弃对NPAPI的支持,到那个时候,我们就只能做FireFox下的扩展了。
现在也是时候开始学习FireFox扩展的开发方式了。

三:以Chrome为内核的各种第三方浏览器

如360、搜狗、百度、UC以及Safari等等均属于此类,之所以把这些归为一类,是因为他们都支持NPAPI形式的插件,并且目前并没有相关的消息显示他们将放弃对NPAPI的支持,在这样的浏览器下,放心的使用NPAPI插件吧。

四:Chrome浏览器

听很多人说最喜欢Chrome浏览器,我不知道他们为什么喜欢,但我想说,我最讨厌的就是Chrome浏览器了,至少在我们目前所处的使用场景下来说,我认为Chrome浏览器是最操蛋的。

1. Chrome对于NPAPI的支持情况

为什么把Chrome浏览器单独列出来呢,是因为Chrome浏览器在不同的版本中,对于控件的支持是不一样的:
- 32版本以前:默认支持NPAPI插件,并且默认开启,方便使用
- 32至41版本:默认支持NPAPI插件,但默认将会是禁用状态,首次使用时将会需要进行开启
- 42至45版本:默认不支持NPAPI插件,如果一定要支持,需要在其设置中心中开启一个设置项[仅供调试用,无实际意义]
- 45版本以后:完全抛弃了NPAPI插件

上面的表述有点碎,总结起来是这样:
在42及以上的Chrome浏览器中,已经不支持NPAPI了,你不能在这样的浏览器上为你的客户提供NPAPI的插件功能。

2. Chrome浏览器上的扩展开发

那么在这样的浏览器上,我们应该怎么样来扩展浏览器的功能呢?

答案就是开发Chrome扩展,你可以通过Chrome扩展来丰富浏览器的功能,开发也比较简单,就是一些js、html文件的组合,再加上一个manifest.json的配置文件。

如果你想在扩展中调用本地的应用程序,那就没这么简单了,还需要使用到Nativemessaging;除了在扩展中配置外,你还需要在本地注册表中指定本地与此扩展匹配的应用程序的相关信息;Chrome扩展将会通过标准输入输出的形式与本地应用互通信息。
当然,你还需要开发本地的应用程序的功能。

3.Chrome扩展的安装

Chrome的扩展应该说是喜欢的人多,恨他的人也多,他确实降低了开发浏览器扩展功能的难度,但由于扩展并不提供静默安装的方式,极大的提高了使用的门槛,降低了易用性:
1). 按Chrome的要求,Chrome的扩展只能从其扩展商店中下载安装
2). 如果不是来源于及扩展商店,默认将不能被安装;这时候你需要下载到本地,打开Chrome://extensions页面,然后将扩展文件拖到扩展页面上进行安装

Chrome的上述限制,导致我们很多使用者并不知道如何安装,当然也就没法使用扩展的功能了,那我们有没有办法自动的为客户安装上呢?

虽然并不完美,但还是有自动安装的方案的,下面我们就来介绍一下:

1). QQ邮箱的截图扩展的强制安装方式

之所以说是强制安装方式,是因为QQ邮箱的截图扩展并不是静默安装的;QQ邮箱团队破解了Chrome扩展的加密方式[或者说Chrome的源码中就有]; 在强制关闭Chrome浏览器后,将扩展相关的文件复制到扩展安装目录下,并且更新了Chrome的扩展列表。

这种方式是目前最好的最傻瓜式的安装方式,唯一的缺点就是会强制杀掉Chrome的进程,这导致在一些应用场景下,这种方式并不实用。
有兴趣的话,你可以通过Chrome登录QQ邮箱,在写信页面点击截图试一下就知道了。

2). 牛牛截图扩展的自动安装方式

牛牛截图采用了一种模拟人为安装的形式,他会自动打开Chrome浏览器,自动进入扩展安装界面,自动将扩展拖到安装窗口,完成安装;如果自动安装失败,则提示用户手动拖放来安装。

这种安装方式的好处是不用重启Chrome浏览器,安装后即可使用;坏处就是涉及的流程较多,可靠性不如QQ的强制安装好。

有兴趣的话,你可以通过Chrome进入 http://www.ggniu.cn/testcapture.html 试一下。

五:Edge浏览器

在Windows10中,一款新的浏览器诞生了,但可悲的是,它目前还不支持任何形式的控件。未来将会支持类似于Chrome扩展的形式,希望微软能提供静默安装方式吧。

总结

浏览器厂商抛弃NPAPI的名义是其技术太老,速度太慢,且不够安全;我觉得最主要还是利益,浏览器厂商们想控制扩展的安装入口。

其实放弃NPAPI正常,但选用新技术模式的时候,是否也应该更多的考虑一下易用性呢?如果浏览器扩展能够支持静默安装的方式,不是更好么?

本文简要整理了在不同浏览器下需要用到的不同技术,以及不同的注意事项,与同受浏览器乱象之苦的人士共勉!

您可以前往 下载页面 去下载示例。

更多信息,请访问 http://www.ggniu.cn/