Greasy Fork

Greasy Fork is available in English.

显示公网IP和相关信息

在页面上显示您的公网IP地址和相关信息,以及访问统计信息、停留时间和周报总结功能,加入国家中文显示

当前为 2023-07-18 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         显示公网IP和相关信息
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  在页面上显示您的公网IP地址和相关信息,以及访问统计信息、停留时间和周报总结功能,加入国家中文显示
// @author       dshboom
// @match        *://*/*
// @grant        GM_xmlhttpRequest
// @grant        GM_addStyle
// ==/UserScript==
(function() {
    'use strict';

    // 创建一个用于显示公网IP和相关信息的DOM元素
    var infoElement = document.createElement('div');
    infoElement.id = 'ip-info-element';

    // ���DOM元素中显示“正在加载”效果
    var loadingElement = document.createElement('p');
    loadingElement.id = 'ip-info-loading';
    loadingElement.innerHTML = '<h4>欢迎使用IP助手</h4><br>IP地址: 正在加载<br>城市: 正在加载<br>国家: 正在加载<br><p>由dshboom开发</p>';
    infoElement.appendChild(loadingElement);

    // 将信息元素添加到页面中
    document.body.appendChild(infoElement);

    // 添加自定义样式
    GM_addStyle(`
        #ip-info-element {
            position: fixed;
            top: 10px;
            left: 10px;
            padding: 10px;
            background-color: rgba(0, 0, 0, 0.5);
            color: #fff;
            font-family: Arial, sans-serif;
            font-size: 12px;
            border-radius: 5px;
            box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
            z-index: 9999;
            visibility: visible;
        }

        #ip-info-loading {
            margin: 0;
            padding: 0;
        }

        #ip-info-element p {
            margin: 5px 0;
        }
    `);

    // 发送请求获取公网IP信息
    GM_xmlhttpRequest({
        method: 'GET',
        url: 'https://api.ipify.org?format=json',
        onload: function(response) {
            var ipData = JSON.parse(response.responseText);
            var ip = ipData.ip;

            // 在DOM元素中显示公网IP地址
            loadingElement.innerText = 'IP地址: ' + ip;

            // 发送请求获取公网IP的相关信息
            GM_xmlhttpRequest({
                method: 'GET',
                url: 'http://ip-api.com/json/' + ip,
                onload: function(response) {
                    var ipInfo = JSON.parse(response.responseText);



                    // 使用翻译API翻译国家信息
                    GM_xmlhttpRequest({
                        method: 'GET',
                        url: 'https://fanyi.youdao.com/translate?&doctype=json&type=AUTO&i=' + ipInfo.country,
                        onload: function(translationResponse) {
                            var translationData = JSON.parse(translationResponse.responseText);
                            var translatedCountry = translationData.translateResult[0][0].tgt;
                            // 在DOM元素中显示公网IP的相关信息
                            var infoElement1 = document.createElement('p');
                            infoElement1.innerText = '城市: ' + ipInfo.city + ' (' +translatedCountry+')';
                            infoElement.appendChild(infoElement1);
                            var infoElement2 = document.createElement('p');
                            infoElement2.innerText = '地区: ' + ipInfo.regionName;
                            infoElement.appendChild(infoElement2);
                            // 获取当前网页的域名
                            var domain = document.domain;

                            // 在DOM元素中显示正在访问的网站的域名
                            var domainElement = document.createElement('p');
                            domainElement.innerText = '网站域名: ' + domain;
                            infoElement.appendChild(domainElement);

                            // 获取访问统计信息
                            var totalVisits = parseInt(localStorage.getItem('totalVisits')) || 0;
                            var todayVisits = parseInt(localStorage.getItem('todayVisits')) || 0;

                            // 显示访问统计信息
                            var totalVisitsElement = document.createElement('p');
                            totalVisitsElement.innerText = '总访问次数: ' + totalVisits;
                            infoElement.appendChild(totalVisitsElement);

                            var todayVisitsElement = document.createElement('p');
                            todayVisitsElement.innerText = '今天的访问次数: ' + todayVisits;
                            infoElement.appendChild(todayVisitsElement);

                            // 更新访问统计信息
                            totalVisits++;
                            todayVisits++;
                            localStorage.setItem('totalVisits', totalVisits);
                            localStorage.setItem('todayVisits', todayVisits);

                            // 记录用户进入页面的时间戳
                            var enterTime = new Date().getTime();

                            // 添加窗口卸载事件,计算用户停留时间并生成周报总结
                            window.addEventListener('beforeunload', function() {
                                // 计算用户停留时间
                                var stayTime = Math.round((new Date().getTime() - enterTime) / 1000); // 转换为秒
                                var stayMinutes = Math.round(stayTime / 60); // 转换为分钟

                                // 存储用户停留时间
                                var totalStayTime = parseInt(localStorage.getItem('totalStayTime')) || 0;
                                totalStayTime += stayMinutes;
                                localStorage.setItem('totalStayTime', totalStayTime);

                                // 存储今日停留时间
                                var todayStayTime = parseInt(localStorage.getItem('todayStayTime')) || 0;
                                todayStayTime += stayMinutes;
                                localStorage.setItem('todayStayTime', todayStayTime);

                                // 生成周报总结
                                if (new Date().getDay() === 0) { // 如果是周日
                                    var weeklySummary = '本周总停留时间: ' + totalStayTime + '分钟';
                                    localStorage.setItem('weeklySummary', weeklySummary);
                                }
                            });

                            // 显示今日停留时间和当前日期
                            var todayStayTimeElement = document.createElement('p');
                            todayStayTimeElement.innerText = '今日停留时间: ' + (parseInt(localStorage.getItem('todayStayTime')) || 0) + '分钟';
                            infoElement.appendChild(todayStayTimeElement);

                            var currentDateElement = document.createElement('p');
                            currentDateElement.innerText = '当前日期: ' + new Date().toLocaleDateString();
                            infoElement.appendChild(currentDateElement);
                        },
                        onerror: function(error) {
                            loadingElement.innerText = '国家信息翻译失败';
                        }
                    });
                },
                onerror: function(error) {
                    loadingElement.innerText = 'IP信息获取失败';
                }
            });
        },
        onerror: function(error) {
            loadingElement.innerText = 'IP地址获取失败';
        }
    });

    // 添加鼠标移动事件,隐藏/显示窗口
    document.addEventListener('mousemove', function(event) {
        var mouseX = event.clientX;
        var mouseY = event.clientY;
        var infoElementRect = infoElement.getBoundingClientRect();

        // 如果鼠标在窗口内,则隐藏窗口;否则显示窗口
        if (
            mouseX >= infoElementRect.left &&
            mouseX <= infoElementRect.right &&
            mouseY >= infoElementRect.top &&
            mouseY <= infoElementRect.bottom
        ) {
            infoElement.style.visibility = 'hidden';
        } else {
            infoElement.style.visibility = 'visible';
        }
    });
})();