您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds "Open with VSCode" button
当前为
// ==UserScript== // @name Github - Open with VSCode // @namespace V@no // @description Adds "Open with VSCode" button // @match https://github.com/* // @version 23.10.28-123217 // @license MIT // @run-at document-end // @grant none // ==/UserScript== (() => { "use strict"; const icon_vscode = "https://raw.githubusercontent.com/vanowm/userscript_github-open_with_vscode/master/media/vscode.svg"; const icon_vstudio = "https://raw.githubusercontent.com/vanowm/userscript_github-open_with_vscode/master/media/vstudio.svg"; const fixLink = () => { const elADownloadZip = document.querySelector(`[data-open-app="link"]`); if (!elADownloadZip) return true; const elLiDownloadZip = elADownloadZip.parentNode; const elAVStudio = document.querySelector('[data-open-app="visual-studio"]'); let elLiVSCode; let elAVSCode; if (elAVStudio) { const elLiVStudio = elAVStudio.parentNode; elLiVSCode = elLiVStudio.cloneNode(true); elAVSCode = elLiVSCode.querySelector("a"); elAVStudio.innerHTML = icon_vstudio + elAVStudio.innerHTML; } else { elLiVSCode = elLiDownloadZip.cloneNode(true); elAVSCode = elLiVSCode.querySelector("a"); elAVSCode.dataset.action = "click:get-repo#showDownloadMessage"; } try { const hydroClick = JSON.parse(elAVSCode.dataset.hydroClick); hydroClick.payload.feature_clicked = "OPEN_WITH_VSCODE"; elAVSCode.dataset.hydroClick = JSON.stringify(hydroClick); } catch{} elAVSCode.innerHTML = icon_vscode + "Open with VSCode"; // display "Launching Visual Studio Code..." message elAVSCode.dataset.openApp = "vscode"; const cloneURL = (document.querySelector(".input-group > .form-control") || {}).value; if (cloneURL) elAVSCode.href = "vscode://vscode.git/clone?url=" + encodeURI(cloneURL); else elAVSCode.href = elAVSCode.href.replace("git-client://", "vscode://vscode.git/"); elLiDownloadZip.parentNode.insertBefore(elLiVSCode, elLiDownloadZip); //we don't need keep observing DOM changes anymore observer.disconnect(); }; const observer = new MutationObserver(fixLink); if (fixLink()) observer.observe(document, {childList: true, subtree: true}); })();