Greasy Fork 还支持 简体中文。

Internet Speed Monitor

Monitors your internet speed in Mbps and displays it in a movable panel at the top of the page. The panel can be toggled to show or hide by clicking anywhere on the page. The speed is updated every second. Ideal for tracking internet performance in real-time while browsing.

  1. // ==UserScript==
  2. // @name Internet Speed Monitor
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.10
  5. // @description Monitors your internet speed in Mbps and displays it in a movable panel at the top of the page. The panel can be toggled to show or hide by clicking anywhere on the page. The speed is updated every second. Ideal for tracking internet performance in real-time while browsing.
  6. // @author Your Name
  7. // @match *://*/*
  8. // @grant none
  9. // @license MIT
  10. // @supportURL https://github.com/yourusername/your-repository/issues
  11. // ==/UserScript==
  12.  
  13.  
  14. (function() {
  15. 'use strict';
  16.  
  17. // Create the speed display panel
  18. const speedPanel = document.createElement('div');
  19. speedPanel.style.position = 'fixed';
  20. speedPanel.style.top = '10px'; // Position at top
  21. speedPanel.style.right = '10px'; // Position at right
  22. speedPanel.style.zIndex = '9999';
  23. speedPanel.style.backgroundColor = 'rgba(0, 0, 0, 0.5)'; // Semi-transparent background
  24. speedPanel.style.color = '#ffffff';
  25. speedPanel.style.padding = '5px 10px';
  26. speedPanel.style.borderRadius = '5px';
  27. speedPanel.style.fontFamily = 'Arial, sans-serif';
  28. speedPanel.style.fontSize = '12px'; // Smaller font size
  29. speedPanel.style.boxShadow = '0 0 5px rgba(0, 0, 0, 0.5)'; // Slight shadow for better visibility
  30. speedPanel.style.cursor = 'pointer'; // Pointer cursor to indicate it can be interacted with
  31. speedPanel.style.display = 'block'; // Ensure panel is visible initially
  32. document.body.appendChild(speedPanel);
  33.  
  34. // Toggle visibility when clicking anywhere on the page
  35. document.addEventListener('click', () => {
  36. if (speedPanel.style.display === 'none') {
  37. speedPanel.style.display = 'block';
  38. } else {
  39. speedPanel.style.display = 'none';
  40. }
  41. });
  42.  
  43. async function calculateSpeed() {
  44. const startTime = Date.now();
  45. try {
  46. // Test file with known size (adjust URL as needed)
  47. const response = await fetch('https://httpbin.org/bytes/1000000'); // 1MB file
  48. const endTime = Date.now();
  49. const duration = (endTime - startTime) / 1000; // duration in seconds
  50. const fileSize = 1 * 1024 * 1024 * 8; // 1MB in bits
  51. const speed = fileSize / duration; // speed in bps
  52. const speedMbps = speed / (1024 * 1024); // convert to Mbps
  53. const speedMbpsFormatted = speedMbps.toFixed(2); // format to 2 decimal places
  54. speedPanel.textContent = `${speedMbpsFormatted} Mbps`;
  55. } catch (error) {
  56. speedPanel.textContent = 'Error calculating speed';
  57. console.error('Error calculating speed:', error);
  58. }
  59. }
  60.  
  61. // Update speed every 1 second
  62. setInterval(calculateSpeed, 1000);
  63. })();