[转]浅谈浏览器插件检测 和自定义协议的支持

简介:

前一阵子一直在折腾浏览器的插件检测和自定义协议的支持。

经过种种痛苦的折腾,算是对这一领域有了点浅显的认知。特此记录一下

 

一、背景知识

自定义协议:常用的协议有 http:// https://  ftp:// 等

然而我们也经常会遇到类似这样的协议连接  
thunder://  迅雷的

item://  itunes的

ed2k:// 电驴的

这样的协议是需要本地计算机安装软件与之接应, 实现相应操作的

也就是当你点一个类似的连接,浏览器会通知系统以何种程序处理该种协议的连接,这种对应是通过注册表来实现的

参考资料:http://www.cnblogs.com/Aricc/archive/2009/03/18/1415929.html 

 

二、实现方案

要定义一个自定义协议,首先需要你有一款程序与之对应,

也就是说这个协议得有软件去处理,一般会是下载操作。

而自定义协议连接最终是显示在网页上的,最终这是网页与本地程序之间的交互。

而之间的桥梁就是浏览器。

那么要支持一个自定义协议,还需要去检测本地是否有支持该协议的处理程序。

这个能力的检测是要通过检测浏览器的插件来判断的。

也就是 装软件的时候同时给浏览器增加插件,以便标示系统有能力支持协议。

画一个流程图:

发布软件 和自定义协议——》安装软件同时给浏览器安装插件———》用脚本检测浏览器插件以判断支持情况————》点击自定义协议连接调用本地程序处理

 

三、插件检测

IE 可以通过尝试 new ActiveXObject(axname); 操作是否成功来判断插件存在情况

        var a = false;
        try {
                var obj = new ActiveXObject(axname);
                a = true;
        } catch (e) {
                a = false;    
        };
        return a;

IE的另一种方法是  预先埋设一个 object 并查看该object的属性或者方法来判断本地是否有能力支持

比如apple itunes的object为: <object classID="CLSID:D719897A-B07A-4C0C-AEA9-9B663A28DFCB" width="1" height="1" id="iTunesDetectorIE" ></object>

Firefox Chrome 等浏览器可以通过遍历其plugin 查看pluginName是否符合来判断插件存在情况

        var a = false;
        if(navigator.plugins && navigator.plugins.length > 0) {
                for(var b = 0; b < navigator.plugins.length; b++) {
                        var c = navigator.plugins[b];
                        var d = c.name;
                        if(new RegExp(plugname,'i').test(d)) {
                                a = true
                        }
                }
        }
        return a

另一种方法是 通过mimetype 做判断

        try {
                var mimetype = navigator.mimeTypes["application/"+plugname];
                if(mimetype){
                        a = true;
                }else{
                        a = false;
                }
        }
        catch (e) {
                a = false;
        }
        return a;

 

四、存在的问题

IE操作activeX控件的时候 浏览器可能会出现小黄条提示 这可能跟你的浏览器设置相关,会有安全提示,这是无法避免的

也不要企图捕获小黄条出现的事件,这是安全提示,除非用户主动操作,其他手段无法干预

当你的插件在不同的域名下运行时,会重复提示,只有用户允许在该域名下运行时,提示才会消失。

当然如果你肯花钱,你可以做成 itunes的插件那样的,默认在任何域名下运行

 要获取这个权限需要跟微软谈,这是BD的事儿,不是RD的事儿。

当PM们说为何同样的代码苹果能做到,而你为何做不到的时候,可以明确告诉他们, 这不是技术的事儿。

 

 五、具体应用的实现流程

进入页面,

浏览器判断

不同浏览器的插件支持检测

cookie记录检测结果

没有插件————》预加载弹窗提示资源 

监测专用协议连接的点击情况

根据插件支持检测结果做相应操作

有插件————》调用本地程序处理

无插件(或者检测不到)————》 弹窗提示安装软件

 

六、关于强制调用

如果不能确定本地有没有相应程序支持,而强制将专用链接给浏览器处理会怎样?

Firefox Chrome 都有有好的提示界面,提示浏览器不知道采用何种程序处理该协议的链接

IE 不同 版本会有不同表现,这跟它们的安全级别相关。

首先所有的IE都会显示一个丑陋的界面表示浏览器打不开这个链接 

IE6的 安全性能最差,你可以用一个隐藏的iframe 来调用这个专用链接,而不会看到报错信息,运气好的话你可以

调起本地程序

IE7 8 9 则提升了安全性能,如果用隐藏的iframe来调用不识别的链接时,无论嵌套几层,总会立即反映到最顶层

显示无法打开该链接,意在通知用户你在调用一个不识别的协议,可能会危害你的计算机安全。

IE9 第一次会报错,显示无法打开,而再次点击则不会重复显示无法打开的页面。

 

七、具体项目应用和代码实现

http://zhushou.360.cn/script/360mobilemgrdownload.js

 示例地址:

 http://zhushou.360.cn/

 

注:原文为http://www.cnblogs.com/trance/archive/2012/05/16/2503663.html

版权

作者:Artwl

出处:http://artwl.cnblogs.com

本文首发博客园,版权归作者跟博客园共有。转载必须保留本段声明,并在页面显著位置给出本文链接,否则保留追究法律责任的权利。




本文转自Artwl博客园博客,原文链接:http://www.cnblogs.com/artwl/,如需转载请自行联系原作者

相关文章
|
3月前
|
机器学习/深度学习 人工智能 文字识别
浏览器AI模型插件下载,支持chatgpt、claude、grok、gemini、DeepSeek等顶尖AI模型!
极客侧边栏是一款浏览器插件,集成ChatGPT、Claude、Grok、Gemini等全球顶尖AI模型,支持网页提问、文档分析、图片生成、智能截图、内容总结等功能。无需切换页面,办公写作效率倍增。内置书签云同步与智能整理功能,管理更高效。跨平台使用,安全便捷,是AI时代必备工具!
266 8
|
5月前
|
数据采集 前端开发 JavaScript
深挖navigator.webdriver浏览器自动化检测的底层分析
本文详细讲解了如何通过技术手段破解浏览器 `navigator.webdriver` 检测,结合爬虫代理、多线程等策略,在豆瓣图书页面批量采集数据。具体包括:隐藏 Selenium 特征、配置代理突破 IP 限制、设置伪装用户、利用多线程提升效率。文章面向初学者,提供分步教程与示例代码,同时设有「陷阱警告」帮助规避常见问题。目标是从底层实现反检测,高效采集图书评分、简介、作者等信息,适合具备 Python 和 Selenium 基础的读者实践学习。
219 12
深挖navigator.webdriver浏览器自动化检测的底层分析
|
5月前
|
Web App开发 人工智能 JavaScript
一键三连不求人!用 CodeBuddy 写个浏览器插件自动点赞、评论、收藏
本文介绍了一款通过 CodeBuddy AI 工具开发的浏览器插件,可自动完成“点赞、评论、收藏”三连操作。作者从需求出发,分四步实现:搭建基础框架、指定目标网页、解析内容并模拟点击事件,最后加载验证插件。借助 CodeBuddy 自动生成代码,整个过程高效便捷,大幅提升用户体验。此工具不仅节省手动操作时间,还为自动化任务提供了新思路,适合热爱技术与效率提升的网页冲浪者尝试。
|
6月前
|
数据采集 JavaScript 前端开发
浏览器自动化检测对抗:修改navigator.webdriver属性的底层实现
本文介绍了如何构建一个反检测爬虫以爬取Amazon商品信息。通过使用`undetected-chromedriver`规避自动化检测,修改`navigator.webdriver`属性隐藏痕迹,并结合代理、Cookie和User-Agent技术,实现稳定的数据采集。代码包含浏览器配置、无痕设置、关键词搜索及数据提取等功能,同时提供常见问题解决方法,助你高效应对反爬策略。
541 1
|
数据可视化 Java Windows
Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client
本文介绍了如何在Windows环境下安装Elasticsearch(ES)、Elasticsearch Head可视化插件和Kibana,以及如何配置ES的跨域问题,确保Kibana能够连接到ES集群,并提供了安装过程中可能遇到的问题及其解决方案。
Elasticsearch入门-环境安装ES和Kibana以及ES-Head可视化插件和浏览器插件es-client
|
8月前
|
人工智能 程序员 测试技术
AI编程:Coze + Cursor实现一个思维导图的浏览器插件
本文是小卷关于AI编程工具学习的第3篇文章,通过开发一个思维导图生成工具,详细介绍了AI编程的完整流程。从需求分析、插件选择(如Coze的TreeMind),到创建测试工作流、发布API,再到整合API和开发浏览器插件,最终实现了用户选中文字后生成思维导图的功能。文章展示了如何利用现有工具高效开发,并总结了AI编程的优势与未来趋势。
875 14
|
9月前
|
Web App开发 搜索推荐 开发者
浏览器插件上架指南:如何把你的产品搬上浏览器插件市场
在实践了 Chrone、Firefox、Edge、Opera 等 几个主要的插件平台的上架发布工作后,我觉得很有必要把这个过程和思考记录下来,分享给大家,希望能提供一些参考和避坑的经验。我想通过这篇文章,和大家聊聊「为什么我要做这件事」,以及「这个系列文章会包含哪些内容」。我想用一个系列的文章,记录我是如何把 EmojiClick 搬到浏览器插件市场的,也给大家提供一些借鉴经验。
262 19
|
11月前
|
Web App开发 JavaScript 前端开发
使用 Chrome 浏览器的内存分析工具来检测 JavaScript 中的内存泄漏
【10月更文挑战第25天】利用 Chrome 浏览器的内存分析工具,可以较为准确地检测 JavaScript 中的内存泄漏问题,并帮助我们找出潜在的泄漏点,以便采取相应的解决措施。
1319 9
|
Web App开发 开发者
|
安全 Oracle Java
edge浏览器加载java插件
edge浏览器加载java插件
757 1