用js识别是否360浏览器
2023-09-11 14:21:35 时间
360浏览器说实话比较恶,以前可以通过内核返回的字符串判定是否包含"360"字样的方法来判定
如以下代码
window.navigator.userAgent.indexOf('360')!=-1
但360浏览器某次更新后,内核显示的字符串已经和IE浏览器是一样的了,导致无法判断是IE还是360。但有人又说了,既然是一样IE的内核,不需要单独判定是不是360的,我说这些人站着说话不腰疼,不知道他们有没有编写过一些代码,发现在IE和360浏览器的表现行为是不一样的。因此,这个判断还是有必要的,后面大家都出了一些偏门的方法,比如 写js去加载这个图片'res://360se.exe/2/2025',我不知道如果加载不了这个图片,是不是一直会挂在那里,我是懒得去试这种方法。
下面我看了下 window.navigator的成员集合,想想应该这么多成员集合,360不会都实现了吧?结果最后终于发现了一些区别,下面给出我的判断代码。
- <%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html>
- <head>
- <base >
- <title></title>
- <script>
- function bro(){
- var is360 = false;
- var isIE = false;
- if (window.navigator.appName.indexOf("Microsoft") != -1){
- isIE= true;
- }
- if(isIE&&(window.navigator.userProfile+'')=='null'){
- is360 = true;
- }
- if(is360){
- document.body.innerText = '360浏览器';
- }else if(isIE){
- document.body.innerText = 'IE浏览器';
- }
- }
- </script>
- </head>
- <body onload="bro();">
- </body>
- </html>
注意不要忘了这句话,不然你的执行结果是不会对的。
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
以上方法我已经在项目中使用了,效果还行。
PS:以上是好久以前写的,现在已经没用了,现在360浏览器6.3版本,是跟Chrome浏览器内核一样了,不是和之前的IE内核,360真是变来变去,以下是现在修改的代码(2014年5月30日写)
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html>
- <head>
- <base >
- <title></title>
- <script>
- function bro(){
- var is360 = false;
- var isIE = false;
- var isFirefox = false;
- var isCrome = false;
- var broName = '';
- if(window.navigator.userAgent.indexOf('MSIE')!=-1&&window.navigator.appName.indexOf("Microsoft") != -1){
- isIE = true;
- broName = 'IE';
- }
- if(window.navigator.userAgent.indexOf('Firefox')!=-1){
- isFirefox = true;
- broName = 'Firefox';
- }
- if(window.navigator.userAgent.indexOf('Chrome')!=-1){
- if(window.navigator.webkitPersistentStorage){
- isCrome = true;
- broName = 'Chrome';
- }else{
- is360 = true;
- broName = '360';
- }
- }
- document.getElementById('broType').value=broName;
- }
- </script>
- </head>
- <body onload="bro();">
- <input type="text" id="broType" name="broType">
- </body>
- </html>
现在请用最新的方法来判定。
相关文章
- JS 逆向 --- 过无限debugge、hook、js混淆还原、控制流混淆
- Universal JS module loader
- node.js 调用天气webservice接口
- 小程序/JS二进制操作ArrayBuffer
- 每天记录一点:NetCore获得配置文件 appsettings.json vue-router页面传值及接收值 详解webpack + vue + node 打造单页面(入门篇) 30分钟手把手教你学webpack实战 vue.js+webpack模块管理及组件开发
- JS监听不到被操作后dom的事件,js动态生成的DOM绑定事件失效,解决方案
- js实现页面与页面之间传值的三种方法
- 【JS】js创建Object对象和构造函数的多种方法(综合示例)
- Vue - 实现用 JS 调用自定义组件 / 类似 ElementUI 弹框组件(在 js 文件中通过 this.xxx 方式调用并显示自定义弹框模态框组件)
- JS访问数据库[非Node.js]
- 《D3.js数据可视化实战手册》—— 1.2 搭建一个简易的D3开发环境
- js 保留两位小数,Js四舍五入,JavaScript Math四舍五入
- base.js,通用js方法,Js方法封装
- JS教程之Electron.js设计强大的多平台桌面应用程序的好工具
- JS 实现精确加减乘除
- js获取当前页面url信息
- 推荐4款高星星JS库:canvas库-Fabric.js、JavaScript客户端文件上传库-FilePond、客户端保存文件解决方案-FileSaver、JavaScript在线解压 ZIP 文件-JSZip
- 对特殊字符编码js与c#中的处理方法
- 使用jasmine来对js进行单元测试
- js获取字符串最后一位方法
- JQuery/JS插件 linq.js 获取所有选中行的Id
- JQuery/JS插件 linq.js 入门
- js 判断变量是否为空