Github - Open with VSCode

Adds "Open with VSCode" button

  1. // ==UserScript==
  2. // @name Github - Open with VSCode
  3. // @namespace V@no
  4. // @description Adds "Open with VSCode" button
  5. // @match https://github.com/*
  6. // @version 25.6.24-000643
  7. // @license MIT
  8. // @run-at document-end
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. (() =>
  13. {
  14. "use strict";
  15. const fixLink = () =>
  16. {
  17. if (document.getElementById("vscode"))
  18. return;
  19.  
  20. const elUL = document.querySelector(`#__primerPortalRoot__ > div > div > div.react-overview-code-button-action-list > div > ul`);
  21. if (!elUL)
  22. return true;
  23.  
  24. const elLi_DownloadZip = elUL.querySelector(`li:last-child`);
  25. const elLi_VSCode = elLi_DownloadZip.cloneNode(true);
  26. elLi_VSCode.id = "vscode";
  27. elLi_VSCode.classList.add("vscode");
  28. const elA_VSCode = elLi_VSCode.querySelector("a");
  29. elA_VSCode.lastChild.firstChild.textContent = "Open with VSCode";
  30. const elImg_Vscode = document.createElement("img");
  31. elImg_Vscode.classList.add("icon");
  32. elImg_Vscode.src = "https://raw.githubusercontent.com/vanowm/userscript_github-open_with_vscode/master/media/vscode.svg";
  33. const elSvg = elA_VSCode.querySelector("svg");
  34. elSvg.parentNode.replaceChild(elImg_Vscode, elSvg);
  35.  
  36. const cloneURL = (elUL.parentNode.querySelector(`input`) || {}).value
  37. || location.origin + location.pathname + ".git";
  38. elA_VSCode.href = "vscode://vscode.git/clone?url=" + encodeURI(cloneURL);
  39.  
  40. elLi_DownloadZip.parentNode.insertBefore(elLi_VSCode, elLi_DownloadZip);
  41.  
  42. /* ---------------------------- Visual Studio ---------------------------- */
  43. const elLiVStudio = elUL.querySelector(`li.${elLi_VSCode.classList.item(0)}:nth-child(2)>button`);
  44. if (elLiVStudio)
  45. {
  46. const elImg_Vstudio = document.createElement("img");
  47. elImg_Vstudio.classList.add("icon");
  48. elImg_Vstudio.src = "https://raw.githubusercontent.com/vanowm/userscript_github-open_with_vscode/master/media/vstudio.svg";
  49. elLiVStudio.prepend(elImg_Vstudio);
  50. }
  51. };
  52.  
  53. const observer = new MutationObserver(fixLink);
  54. observer.observe(document, {childList: true, subtree: true});
  55. fixLink();
  56. })();

QingJ © 2025

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