侧边栏壁纸
  • 累计撰写 6 篇文章
  • 累计创建 26 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

写了条页脚,大家可以用。。。

2026.4.11 增加了ip点击查询 弃用了ping0.cc

增加了 ipinfo.io 增加了cdn链接跳转

前言

页脚是要手动改代码的

<!-- 访客信息页脚 -->
<footer style="text-align: center;">
  <div id="visitor-info-display" style="white-space: nowrap;">
    <span id="vi-device">设备:检测中...</span>
    <span>|</span>
    <span id="vi-browser">浏览器:检测中...</span>
    <span>|</span>
    <span id="vi-ip">IP:获取中...</span>
    <span>|</span>
    <span id="vi-location">位置:定位中...</span>
    <span>|</span>
    <span id="vi-source">查询源:等待中...</span>
    <span>|</span>
   <a href="https://console.tencentcloud.com/edgeone/" target="_blank" style="text-decoration:none;color:#666;font-size:12px;">
  由Tencent Cloud EdgeOne 提供CDN加速及防护
</a>
    <span>|</span>
    <span>&copy; Beibingの小窝 保留所有权利</span>
  </div>
</footer>

<script>
(function() {
  const ua = navigator.userAgent;
  
  function detectDevice() {
    if (/iPad|Tablet/i.test(ua)) return '平板';
    if (/Mobile|Android|iPhone/i.test(ua)) return '手机';
    if (/Windows/i.test(ua)) return 'Windows';
    if (/Mac/i.test(ua)) return 'Mac';
    if (/Linux/i.test(ua)) return 'Linux';
    return '电脑';
  }
  
  function detectBrowser() {
    if (/Edg/i.test(ua)) return 'Edge';
    if (/Opera|OPR/i.test(ua)) return 'Opera';
    if (/Firefox/i.test(ua)) return 'Firefox';
    if (/Safari/i.test(ua) && !/Chrome/i.test(ua)) return 'Safari';
    if (/Chrome/i.test(ua)) return 'Chrome';
    return '未知';
  }
  
  function isPrivateIP(ip) {
    if (!ip || ip === 'unknown' || ip === '127.0.0.1') return true;
    return /^(127\.|10\.|192\.168\.|172\.(1[6-9]|2[0-9]|3[01])\.)|::1|fe80:/i.test(ip);
  }
  
  async function fetchWithTimeout(url, timeout) {
    const controller = new AbortController();
    const id = setTimeout(() => controller.abort(), timeout);
    try {
      const res = await fetch(url, { signal: controller.signal });
      clearTimeout(id);
      return res;
    } catch (e) {
      clearTimeout(id);
      throw e;
    }
  }
  
</script>

这里手动改

仿照格式改

    <span id="">由xxxx 提供CDN加速及防护</span>
    <span>|</span>
    <span id="">&copy; xxxx 保留所有权利</span>

当然,亦可以直接删除

原理

这是这段代码的原理详解:

HTML 结构原理

这是这段代码的原理详解:

HTML 结构原理

<footer> 页脚容器

  • text-align: center 使内部所有文本和行内元素水平居中

<div id="visitor-info-display"> 信息展示区域

  • 包含 7 个 <span> 元素,用 | 分隔

  • 所有 <span> 默认 display: inline,自然横向排列

  • 问题:没有 white-space: nowrap,内容过多时会自动换行

空的 id="" 属性

  • 最后两个 <span>id="" 但无值,这是无效 HTML

  • 浏览器会忽略空 id,但建议删除避免潜在问题


JavaScript 原理

立即执行函数 (IIFE)

JavaScript

复制

(function() { ... })();
  • 创建独立作用域,避免变量污染全局命名空间

设备检测 detectDevice()

表格

判断逻辑

原理

/iPad|Tablet/i.test(ua)

正则匹配 iPad 或 Tablet 关键字

/Mobile|Android|iPhone/i.test(ua)

匹配移动端标识

/Windows/i.test(ua)

匹配 Windows 系统

后续 Mac/Linux

同理正则匹配

优先级:平板 → 手机 → 桌面系统,避免平板被误判为手机

浏览器检测 detectBrowser()

表格

顺序

判断

原因

1

Edge

Edge 浏览器 UA 含 Chrome/Safari 字样,必须最先判断

2

Opera|OPR

Opera 也有特殊标识

3

Firefox

独立标识

4

Safari && !Chrome

Chrome 的 UA 包含 Safari,需排除

5

Chrome

最后判断

IP 获取 fetchIP()

双 API 容错机制

尝试 ping0.cc/geo   已弃用
    ↓ 成功 → 显示 IP 和位置
    ↓ 失败
尝试 api.ip.sb/geoip
    ↓ 成功 → 显示 IP 和位置
    ↓ 失败
显示"获取失败"

0

评论区