Skip to content

Commit

Permalink
updated 添加新功能
Browse files Browse the repository at this point in the history
  • Loading branch information
mumuy committed Aug 8, 2024
1 parent 9262da2 commit d36936d
Show file tree
Hide file tree
Showing 20 changed files with 378 additions and 251 deletions.
13 changes: 10 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,17 @@ let info = await browser.getInfo();
"timezone":'Asia/Shanghai', // 所处时区
"isWebview": false, // 是否Webview(仅Android有效)
"isBot": false, // 是否搜索引擎蜘蛛程序
"isTouch": false, // 是否为触屏
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/119.0.0.0 Safari/537.36"
}
```

#### 浏览器支持情况
```js
// 判断浏览器是否支持某种字体
let hasYaHei = browser.isSupport('font-family','Microsoft YaHei');
```

<table>
<caption><h3>browser - 浏览器</h3></caption>
<thead>
Expand All @@ -76,9 +83,9 @@ let info = await browser.getInfo();
<tr><td>Kindle</td><td>亚马逊电子书</td></tr>
<tr><td>Iceweasel</td><td>Firefox浏览器的Debian再发布版</td></tr>
<tr><td>Konqueror</td><td>开源Web浏览器和文件管理器</td></tr>
<tr><td>Iceape</td><td>&nbsp;</td></tr>
<tr><td>SeaMonkey</td><td>&nbsp;</td></tr>
<tr><td>Epiphany</td><td>&nbsp;</td></tr>
<tr><td>SeaMonkey</td><td>丰年虾浏览器,Mozilla基金会建构</td></tr>
<tr><td>Epiphany</td><td>GNOME 桌面下的主力浏览器</td></tr>
<tr><td>Headless</td><td>谷歌无头浏览器</td></tr>
<tr><td rowspan="16">国内浏览器</td><td>360</td><td>360浏览器(手机版)</td></tr>
<tr><td>360SE</td><td>360安全浏览器</td></tr>
<tr><td>360EE</td><td>360极速浏览器</td></tr>
Expand Down
4 changes: 2 additions & 2 deletions dist/browser.min.js

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions dist/browser.min.mjs

Large diffs are not rendered by default.

203 changes: 1 addition & 202 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -40,208 +40,7 @@
</div>
</div>
<script type="text/javascript" src="./dist/browser.min.js"></script>
<script type="text/javascript">
let $module = document.querySelector('.mod-panel .bd');
let info = {
"architecture": "",
"bitness": "",
"browser": "",
"browserVersion": "",
"device": "",
"devicePixelRatio":"",
"deviceMemory":"",
"engine": "",
"gpu": "",
"gpuModel": "",
"isWebview": "",
"isBot": "",
"ip": "",
"language": "",
"network": "",
"platform": "",
"screenWidth": "",
"screenHeight": "",
"screenFPS":"",
"clientWidth": "",
"clientHeight": "",
"system": "",
"systemVersion": "",
"timezone": "",
"userAgent": "",
};
let getTemplate = function(info){
let browserList = ['Chrome','Safari','Firefox','Edge','IE','Opera','360','360SE','360EE','360AI','QQBrowser','Sogou','Liebao','Maxthon','TheWorld','Quark','2345Explorer','115Browser','UC','QQ','Wechat','Yandex','Vivaldi','Vivo','Meizu','Xiaomi','OPPO','OnePlus','Huawei','HONOR','Lenovo','Brave','Alipay','Taobao','Toutiao'];
return `
<table>
<tbody>
<tr>
<td class="th">
<p class="title">用户代理</p>
<p class="subtitle">User-Agent</p>
</td>
<td>${info.userAgent}</td>
</tr>
<tr>
<td class="th">
<p class="title">浏览器</p>
<p class="subtitle">Browser</p>
</td>
<td>
${browserList.includes(info.browser)?`<img src="static/image/icon/${info.browser}.png" width="24" height="24"/>`:''}
<strong>${info.browser||'<img src="static/image/loading.gif" width="32" height="32"/>'}</strong>
</td>
</tr>
<tr>
<td class="th">
<p class="title">版本</p>
<p class="subtitle">Version</p>
</td>
<td><span>${info.browserVersion}</span></td>
</tr>
<tr>
<td class="th">
<p class="title">渲染引擎</p>
<p class="subtitle">Engine</p>
</td>
<td>${info.engine}</td>
</tr>
<tr>
<td class="th">
<p class="title">操作系统</p>
<p class="subtitle">System</p>
</td>
<td>${info.system} ${info.systemVersion} (${info.bitness}位)</td>
</tr>
<tr>
<td class="th">
<p class="title">系统平台</p>
<p class="subtitle">Platform</p>
</td>
<td>${info.platform}</td>
</tr>
<tr>
<td class="th">
<p class="title">屏幕尺寸</p>
<p class="subtitle">Screen size</p>
</td>
<td>${info.screenWidth} x ${info.screenHeight}</td>
</tr>
<tr>
<td class="th">
<p class="title">屏幕刷新率</p>
<p class="subtitle">Screen FPS</p>
</td>
<td>${info.screenFPS} <span class="text-gray">FPS</span></td>
</tr>
<tr>
<td class="th">
<p class="title">处理器架构</p>
<p class="subtitle">Architecture</p>
</td>
<td>${info.architecture}</td>
</tr>
<tr>
<td class="th">
<p class="title">设备类型</p>
<p class="subtitle">Device type</p>
</td>
<td>${info.device}</td>
</tr>
<tr>
<td class="th">
<p class="title">设备像素比</p>
<p class="subtitle">Device Pixel Ratio</p>
</td>
<td>${info.devicePixelRatio}</td>
</tr>
<tr>
<td class="th">
<p class="title">设备内存</p>
<p class="subtitle">Device Memory</p>
</td>
<td>${info.deviceMemory}</td>
</tr>
<tr>
<td class="th">
<p class="title">图形处理器</p>
<p class="subtitle">GPU model</p>
</td>
<td>${info.gpuModel}</td>
</tr>
<tr>
<td class="th">
<p class="title">IP地址</p>
<p class="subtitle">IP address</p>
</td>
<td>${info.ip}</td>
</tr>
<tr>
<td class="th">
<p class="title">语言</p>
<p class="subtitle">Language</p>
</td>
<td>${info.language}</td>
</tr>
<tr>
<td class="th">
<p class="title">时区</p>
<p class="subtitle">Timezone</p>
</td>
<td>${info.timezone}</td>
</tr>
<tr>
<td class="th">
<p class="title">网络类型</p>
<p class="subtitle">Network</p>
</td>
<td>${info.network}</td>
</tr>
<tr>
<td class="th">
<p class="title">是否联网</p>
<p class="subtitle">is online</p>
</td>
<td>${info.isOnline?'是 <span class="text-gray">(true)</span>':'否 <span class="text-gray">(false)</span>'}</td>
</tr>
<tr>
<td class="th">
<p class="title">剩余电量</p>
<p class="subtitle">Battery</p>
</td>
<td>${info.battery>=0?info.battery*100+'%':''}</td>
</tr>
<tr>
<td class="th">
<p class="title">是否充电</p>
<p class="subtitle">is charging</p>
</td>
<td>${info.isCharging?'是 <span class="text-gray">(true)</span>':'否 <span class="text-gray">(false)</span>'}</td>
</tr>
<tr>
<td class="th">
<p class="title">是否蜘蛛</p>
<p class="subtitle">is robot</p>
</td>
<td>${info.isRobot?'是 <span class="text-gray">(true)</span>':'否 <span class="text-gray">(false)</span>'}</td>
</tr>
<tr>
<td class="th">
<p class="title">是否Webview</p>
<p class="subtitle">is webview</p>
</td>
<td>${info.isWebview?'是 <span class="text-gray">(true)</span>':'否 <span class="text-gray">(false)</span>'}</td>
</tr>
</tbody>
</table>`;
};
$module.innerHTML = getTemplate(info);

browser.getInfo().then(function(info){
$module.innerHTML = getTemplate(info) + `
<iframe style="display:none;" src="https://passer-by.com/browser/stat.html?browser=${info.browser}&ua=${info.userAgent}" width="" height=""></iframe>
`;
});
</script>
<script type="text/javascript" src="./static/script/index.js"></script>
<script type="text/javascript" src="https://passer-by.com/public/script/projects.js"></script>
<script type="text/javascript" src="https://passer-by.com/public/script/stat.js"></script>
</body>
Expand Down
62 changes: 35 additions & 27 deletions src/browser.js
Original file line number Diff line number Diff line change
@@ -1,41 +1,49 @@
import browserLoader from './module/browser-loader.js';
import systemLoader from './module/system-loader.js';
import deviceLoader from './module/device-loader.js';
import gpuLoader from './module/gpu-loader.js';
import networkLoader from './module/network-loader.js';
import batteryLoader from './module/battery-loader.js';
import screenLoader from './module/screen-loader.js';
import languageLoader from './module/language-loader.js';
import timezoneLoader from './module/timezone-loader.js';
import browserParser from './module/browser-parser.js';
import systemParser from './module/system-parser.js';
import deviceParser from './module/device-parser.js';
import gpuParser from './module/gpu-parser.js';
import networkParser from './module/network-parser.js';
import batteryParser from './module/battery-parser.js';
import screenParser from './module/screen-parser.js';
import languageParser from './module/language-parser.js';
import timezoneParser from './module/timezone-parser.js';

import supportFontFamily from './module/support/fontFamily.js';

export default {
parse(ua){
let data = {};
[
browserLoader,
systemLoader,
deviceLoader,
].forEach(loader=>{
data = Object.assign(data,loader.parse(ua));
browserParser,
systemParser,
deviceParser,
].forEach(parser=>{
data = Object.assign(data,parser.parse(ua));
});
return data;
},
async getInfo(list = ['browser','system','device','gpu','network','battery','screen','language','timezone']){
let data = {};
let loaderList = [
browserLoader,
systemLoader,
deviceLoader,
gpuLoader,
networkLoader,
batteryLoader,
screenLoader,
languageLoader,
timezoneLoader
].filter(loader=>list.includes(loader.name));
for(let loader of loaderList){
data = Object.assign(data,await loader.getInfo());
let parserList = [
browserParser,
systemParser,
deviceParser,
gpuParser,
networkParser,
batteryParser,
screenParser,
languageParser,
timezoneParser
].filter(parser=>list.includes(parser.name));
for(let parser of parserList){
data = Object.assign(data,await parser.getInfo());
}
return data;
},
isSupport(name,value){
let support = [
supportFontFamily
].find(support=>name==support.name);
return support?support.is(value):false;
}
};
File renamed without changes.
4 changes: 2 additions & 2 deletions src/module/browser-loader.js → src/module/browser-parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import _Coc_Coc from './browser/Coc Coc.js';
import _Kindle from './browser/Kindle.js';
import _Iceweasel from './browser/Iceweasel.js';
import _Konqueror from './browser/Konqueror.js';
import _Iceape from './browser/Iceape.js';
import _SeaMonkey from './browser/SeaMonkey.js';
import _Epiphany from './browser/Epiphany.js';
import _HONOR from './browser/HONOR.js';
Expand Down Expand Up @@ -68,6 +67,7 @@ import _Bytespider from './browser/Bytespider.js';
import _YisouSpider from './browser/YisouSpider.js';
import _YodaoBot from './browser/YodaoBot.js';
import _YandexBot from './browser/YandexBot.js';
import _Headless from './browser/Headless.js';

import _WebKit from './engine/WebKit.js';
import _Trident from './engine/Trident.js';
Expand All @@ -78,7 +78,7 @@ import _KHTML from './engine/KHTML.js';

import userAgent from './runtime/userAgent.js';

let browserList = [_Safari, _Chrome, _Edge, _IE, _Firefox, _Firefox_Focus, _Chromium, _Opera, _Opera_GX, _Vivaldi, _Yandex, _Brave, _Arora, _Lunascape, _QupZilla, _Coc_Coc, _Kindle, _Iceweasel, _Konqueror, _Iceape, _SeaMonkey, _Epiphany, _Huawei, _OPPO, _Vivo, _Xiaomi, _Meizu, _OnePlus, _Samsung, _360, _360EE, _360SE, _360EE_macOS, _360AI, _360AI_macOS, _360ENT, _UC, _QQBrowser, _QQ, _Baidu, _Maxthon, _Sogou, _Liebao, _2345Explorer, _115Browser, _TheWorld, _Quark, _Qiyu, _Lenovo, _Wechat, _WechatWork, _Taobao, _Alipay, _Weibo, _Douban, _Suning, _iQIYI, _DingTalk, _Douyin, _Toutiao, _Googlebot, _Baiduspider, _Sogouspider, _Bingbot, _360Spider, _Bytespider, _YisouSpider, _YodaoBot, _YandexBot];
let browserList = [_Safari, _Chrome, _Edge, _IE, _Firefox, _Firefox_Focus, _Chromium, _Opera, _Opera_GX, _Vivaldi, _Yandex, _Brave, _Arora, _Lunascape, _QupZilla, _Coc_Coc, _Kindle, _Iceweasel, _Konqueror, _SeaMonkey, _Epiphany, _Huawei, _OPPO, _Vivo, _Xiaomi, _Meizu, _OnePlus, _Samsung, _360, _360EE, _360SE, _360EE_macOS, _360AI, _360AI_macOS, _360ENT, _UC, _QQBrowser, _QQ, _Baidu, _Maxthon, _Sogou, _Liebao, _2345Explorer, _115Browser, _TheWorld, _Quark, _Qiyu, _Lenovo, _Wechat, _WechatWork, _Taobao, _Alipay, _Weibo, _Douban, _Suning, _iQIYI, _DingTalk, _Douyin, _Toutiao, _Googlebot, _Baiduspider, _Sogouspider, _Bingbot, _360Spider, _Bytespider, _YisouSpider, _YodaoBot, _YandexBot, _Headless];
browserList.forEach(item=>{
if(!item.is){
item.is = async function(){
Expand Down
3 changes: 2 additions & 1 deletion src/module/browser/360EE.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import _Chrome from './Chrome.js';
import _360 from './360.js';
import userAgent from '../runtime/userAgent.js';
import getMime from '../method/getMime.js';

export default {
name:'360EE',
parse(ua = globalThis?.navigator?.userAgent){
parse(ua = userAgent){
let hash = {
'122':'22.3', // 360极速X
'119':'22.0', // 360极速X
Expand Down
15 changes: 15 additions & 0 deletions src/module/browser/Headless.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import userAgent from '../runtime/userAgent.js';
import globalThis from '../runtime/globalThis.js';

export default {
name:'Headless',
parse(ua = userAgent){
return {
is:ua.includes('HeadlessChrome/'),
version:ua.match(/HeadlessChrome\/([\d.]+)/)?.[1]||'',
};
},
async is(){
return this.parse().is??globalThis?.navigator=='';
}
}
11 changes: 0 additions & 11 deletions src/module/browser/Iceape.js

This file was deleted.

File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Loading

0 comments on commit d36936d

Please sign in to comment.