Link Click Tracker

クリック済みリンクを記録し、視覚的に分かるように表示

当前为 2025-01-31 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Link Click Tracker
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.2
  5. // @description クリック済みリンクを記録し、視覚的に分かるように表示
  6. // @author Your Name
  7. // @match *://*/*
  8. // @grant none
  9. // @license MIT
  10. // ==/UserScript==
  11.  
  12. (function () {
  13. 'use strict';
  14.  
  15. // ハッシュ値を計算する関数 (SHA-256 + 先頭8文字)
  16. async function computeHash(link) {
  17. const encoder = new TextEncoder();
  18. const data = encoder.encode(link);
  19. const hashBuffer = await crypto.subtle.digest("SHA-256", data);
  20. const hashArray = Array.from(new Uint8Array(hashBuffer));
  21. const hashHex = hashArray.map(byte => byte.toString(16).padStart(2, "0")).join("");
  22. return hashHex.substring(0, 8);
  23. }
  24.  
  25. // リンクにチェックマークを追加する関数
  26. function addCheckmark(link) {
  27. // リンク内にimgタグが含まれていない場合のみチェックマークを追加
  28. if (!link.querySelector("img")) {
  29. link.textContent = "✅ " + link.textContent; // テキストの先頭にチェックマークを追加
  30. }
  31. }
  32.  
  33. // ページ内のすべてのリンクをチェック
  34. async function checkLinks() {
  35. const visitedLinks = JSON.parse(localStorage.getItem("visitedLinks")) || {};
  36. const links = document.querySelectorAll("a[href]");
  37.  
  38. for (const link of links) {
  39. const href = link.href;
  40.  
  41. // ハッシュ値を計算して確認
  42. const hash = await computeHash(href);
  43. if (visitedLinks[hash]) {
  44. addCheckmark(link);
  45. }
  46.  
  47. // クリックイベントを追加
  48. link.addEventListener("click", async () => {
  49. const clickHash = await computeHash(href);
  50. visitedLinks[clickHash] = true;
  51. localStorage.setItem("visitedLinks", JSON.stringify(visitedLinks));
  52. checkLinks();
  53. });
  54. }
  55. }
  56.  
  57. // ページロード時にリンクをチェック
  58. checkLinks();
  59. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址