最近项目进入到了验收阶段,需要兼容不同的浏览器,海康的Demo写了一个判断插件是否成功安装的函数,但是经过测试,只在IE浏览器下有效果,在其他的浏览器下面会出现Bug,现在需要写一个通用的方法,在不同的浏览器使用场景下都能判断海康的视频插件是否安装

首先,需要判断用户当前使用的浏览器版本,我在网上找到了一个函数,代码如下:

 function getExplorerInfo() {
var explorer = window.navigator.userAgent.toLowerCase();
//ie
if (explorer.indexOf("msie") >= 0) {
var ver = explorer.match(/msie ([\d.]+)/)[1];
return { type: "IE", version: ver };
}
//firefox
else if (explorer.indexOf("firefox") >= 0) {
var ver = explorer.match(/firefox\/([\d.]+)/)[1];
return { type: "Firefox", version: ver };
}
//Chrome
else if (explorer.indexOf("chrome") >= 0) {
var ver = explorer.match(/chrome\/([\d.]+)/)[1];
return { type: "Chrome", version: ver };
}
//Opera
else if (explorer.indexOf("opera") >= 0) {
var ver = explorer.match(/opera.([\d.]+)/)[1];
return { type: "Opera", version: ver };
}
//Safari
else if (explorer.indexOf("Safari") >= 0) {
var ver = explorer.match(/version\/([\d.]+)/)[1];
return { type: "Safari", version: ver };
}
}
alert("浏览器:" + getExplorerInfo().type + "\n 版本:" + getExplorerInfo().version);

判断浏览器版本

但是在实际的调用中,发现这个函数并不准确,我测试了一下几个不同浏览器返回的window.navigator.userAgent值(即用户当前使用的浏览器型号)

搜狗浏览器
mozilla/5.0 (windows nt 10.0; wow64) applewebkit/537.36 (khtml, like gecko) chrome/49.0.2623.221 safari/537.36 se 2.x metasr 1.0

Chrome浏览器
mozilla/5.0 (windows nt 10.0; wow64) applewebkit/537.36 (khtml, like gecko) chrome/53.0.2785.104 safari/537.36 core/1.53.3538.400

QQ浏览器
mozilla/5.0 (windows nt 10.0; wow64) applewebkit/537.36 (khtml, like gecko) chrome/53.0.2785.104 safari/537.36 core/1.53.3538.400

IE浏览器
mozilla/5.0 (windows nt 10.0; wow64; trident/7.0; .net4.0c; .net4.0e; .net clr 2.0.50727; .net clr 3.0.30729; .net clr 3.5.30729; rv:11.0) like gecko

火狐浏览器
mozilla/5.0 (windows nt 10.0; win64; x64; rv:56.0) gecko/20100101 firefox/56.0

可以看到,区分各个浏览器版本的主要是他们的内核,现在主流的浏览器的内核有四种,Trident,Gecko,Webkit ,Presto,我把方法改了一下,根据内核来判断不同的浏览器,代码如下:

 function getExplorer() {
//获取当前使用的浏览器的型号
var explorer = window.navigator.userAgent.toLowerCase() ;
if (explorer.indexOf("applewebkit") >= 0) {
alert("applewebkit内核浏览器");
}
else if (explorer.indexOf("trident") >= 0) {
alert("IE浏览器");
}
else if (explorer.indexOf("gecko") >= 0) {
alert("gecko内核浏览器");
}
}

改进版

分辨出不同的浏览器之后,下面开始写判断是否安装OCX插件的方法,在IE环境下,用海康自带的方法,其他的浏览器用来判断OCX插件是否注册

首先在搜索框内输入regedit,打开注册表

找到对应OCX插件的名字,复制插件名字

以我本机为例,代码如下:

 var NewObj;
try {
NewObj = new ActiveXObject("WebVideoKitActiveX.WebVideoKitActiveXCtrl.1");
if (typeof(NewObj) != 'undefined') {
// NewObj = null;
alert("已经注册");
}
} catch (e) {
// NewObj = null;
alert("尚未注册");
}

判断插件是否安装

运行,发现还是只是在IE上可以用这个方法判断海康插件是否安装成功,其他浏览器还不能判断,按F12,找到报错的地方,try{}catch{},代码如下:

 try{
WebVideoCtrl.I_InitPlugin(b.videowidth,b.videoheight, {
iWndowType: sziWndowType,
cbSelWnd: function (xmlDoc) {
g_iWndIndex = $(xmlDoc).find("SelectWnd").eq(0).text();
}
});
WebVideoCtrl.I_InsertOBJECTPlugin("divPlugin");
} catch(err) {
alert("没有注册");
} finally { }

抛出异常

问题解决

根据不同浏览器判断OCX插件是否安装的更多相关文章

  1. chrome 浏览器调用 ocx 插件(二)

    原文:http://blog.csdn.net/wangchao1988ok/article/details/46561537 chrome 版本:43.0.2357.124 之前写过关于 chrom ...

  2. chrome 浏览器调用 ocx 插件

    原文:http://blog.csdn.net/wangchao1988ok/article/details/45193489 IE 上使用 ocx 插件网上已经有很多资料说明,这里就不重复了,那如何 ...

  3. 如何判断IE OCX插件正常安装?

    项目中用到了一个第三方的ie ocx控件,而经常遇到客户和测试小伙伴反馈相关功能无法正常使用,也没有友好提示.考虑到这个问题,必须要有一个ie ocx控件的检查机制. 检查原理 创建ActiveXOb ...

  4. EasyPlayer播放器浏览器ActiveX/OCX插件RTSP播放/抓拍/录像功能调用说明

    EasyPlayerPro与EasyPlayer-RTSP新增ocx多窗口播放功能 这里以EasyPlayerPro为例,使用方法如下: 打开播放器文件夹,进入Bin/C++目录,可以看到reg.ba ...

  5. ubuntu下firefox浏览器flash player插件的安装

    自从装了双系统后,ubuntu下的音乐软件只能选择网页播放器了,这无疑是需要播放插件的,这个插件就是falsh player. 当初使用usb启动盘安装的,在安装的过程中还会报找不到CD-rom的错, ...

  6. 浏览器判断是否安装APP

    浏览器判断是否安装APP http://blog.csdn.net/henrywulibin/article/details/52087041 从浏览器中打开我们的应用 http://blog.csd ...

  7. 谷歌Google浏览器去广告插件ABP插件安装与使用

    ---恢复内容开始--- 最新版本的 Chrome 浏览器,主版本号为 67,数字签名日期为 2018.05.30.对 Chrome 的扩展(俗称插件)安装策略进行了调整——只允许在 Chrome 应 ...

  8. Tampermonkey油猴脚本管理插件-最强浏览器插件的安装使用全攻略

      对于接触过谷歌浏览器插件的“玩家”们来说,应该没有人没听说过Tampermonkey用户脚本管理器,也就是中文所说的“油猴”这个chrome插件了. 油猴号称全商店最强的浏览器插件绝非浪得虚名,一 ...

  9. 安装浏览器的vue插件

    安装浏览器的vue插件步骤: 1.在浏览器中打开 https://github.com/vuejs/vue-devtools Clone or download  vue-devtools. 2.解压 ...

随机推荐

  1. package,继承,访问修饰符

    1.package 包(package),用于管理程序中的类,可用于处理类的同名问题. 1.1定义package的方法 package 包名; package用于定义包,必须写在源文件有效代码的第一句 ...

  2. C++ MFC万能的类向导

    MFC的类向导 只要你掌握了类向导,你基本就已经掌握了MFC了,毕竟布局和代码都是自动生成,再加上C++基础上手还是挺快的,剩下的就是多多练习了. 转自: https://blog.csdn.net/ ...

  3. Solaris环境下使用snoop命令抓包

    (1)报文抓取 Solaris中自带有snoop抓包工具,通过执行相应的命令抓取. 抓取目的地址为10.8.3.250的数据包,并存放到/opt/cap250的文件里 snoop -o /opt/ca ...

  4. ZooKeeper02

    Zookeeper 分布式服务框架是 Apache Hadoop 的一个子项目,主要是用来解决分布式应用中经常遇到的一些数据管理问题.

  5. java.lang.IllegalAccessError: org.apache.commons.dbcp.DelegatingPreparedStatement.isClosed()Z

    做spring和mybaits整合时出现的错误,让这个问题困扰了一早上,通过查资料终于把这个问题解决了 具体问题描述: java.lang.IllegalAccessError: org.apache ...

  6. 简单尝试Spring Cloud Gateway

    简单尝试Spring Cloud Gateway 简介 Spring Cloud Gateway是一个API网关,它是用于代替Zuul而出现的.Spring Cloud Gateway构建于Sprin ...

  7. RTSP-RTMP-HLS媒体播放管理

    近在跟一些做安防行业同学交流中发现,他们对于外网中播放各类视频流觉得各种设置麻烦的很, 好吧,小小的做了一个解决方案. 这个工具从视频监控管理平台剥离出来, 支持对rtsp, rtmp, hls流的管 ...

  8. cookie,localStorage和sessionStorage的区别

    cookie已经很久没有用过了,一直觉得session Storage和local Storage更加好用一些.

  9. vuex 入坑篇

    Vuex 是什么? Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 这个状态自管理应用包含 ...

  10. web开发前端面试知识点目录整理

    web开发前端面试知识点目录整理 基本功考察 关于Html 1. html语义化标签的理解; 结构化的理解; 能否写出简洁的html结构; SEO优化 2. h5中新增的属性; 如自定义属性data, ...