您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Add a Paste button to Vultr console
// ==UserScript== // @name Vultr console paste // @name:zh Vultr 控制台 粘贴功能 // @version 0.3 // @description Add a Paste button to Vultr console // @description:zh 给Vultr的控制台添加一个粘贴按钮 // @author Sam0230 // @match *://my.vultr.com/*/novnc/* // @grant none // @run-at document-start // @namespace https://greasyfork.org/users/305841 // ==/UserScript== (function() { 'use strict'; let ASCIIString = function ASCIIChar(str) { return (str == str.match(/[\t-~]*/)[0]); } let clearNonASCIIChar = function clearNonASCIIChar(str) { let result = str.match(/[\t-~]/g); if (!result) { result = []; } return result.join(""); } let sendString = (function () { if (window.sendString) { return window.sendString; } window.sendStringWorking = false; let sendStringTimeoutId = -1; window.sendString = function sendString(str, onfinish, noWorkingAuth) { if (noWorkingAuth != "___noWorkingAuth___noWorkingAuth___noWorkingAuth___noWorkingAuth___noWorkingAuth___") { if (window.sendStringWorking) { return false; } rfb._keyboard.ungrab(); rfb._mouse.ungrab(); } window.sendStringWorking = true; rfb._keyboard._allKeysUp(); let KeyCode = str.charCodeAt(), needShift = ('~!@#$%^&*()_+{}|:"<>?'.indexOf(str[0]) != -1); if (KeyCode == "\n".charCodeAt()) { KeyCode = XK_Return; } if (KeyCode == "\t".charCodeAt()) { KeyCode = XK_Tab; } if (needShift) { rfb.sendKey(XK_Shift_L, true); } rfb.sendKey(KeyCode); if (needShift) { rfb.sendKey(XK_Shift_L, false); } if (str.length != 1) { for (let i = 0; i <= 27; i++) { setTimeout(function () { rfb._keyboard._allKeysUp(); }, i); } sendStringTimeoutId = setTimeout(sendString.bind(this, str.slice(1), onfinish, "___noWorkingAuth___noWorkingAuth___noWorkingAuth___noWorkingAuth___noWorkingAuth___"), 30); } else { window.sendStringWorking = false; rfb._keyboard.grab(); rfb._mouse.grab(); if (onfinish && onfinish.constructor == Function.prototype.constructor) { onfinish(); } } return function stop () { clearTimeout(sendStringTimeoutId); window.sendStringWorking = false; rfb._keyboard.grab(); rfb._mouse.grab(); if (onfinish && onfinish.constructor == Function.prototype.constructor) { onfinish(); } }; } return window.sendString; })(); let pasteButton = document.createElement("input"), textarea = document.createElement("textarea"), CapsLockButton = document.createElement("input"); pasteButton.type = "button"; pasteButton.value = "Paste"; pasteButton.id = "pasteButton"; pasteButton.style.display = "inline"; pasteButton.disabled = true; textarea.placeholder = "Paste"; textarea.id = "pasteTextarea"; textarea.style.display = "inline"; textarea.style.position = "relative"; textarea.style.top = "4px"; textarea.style.height = "13px"; textarea.cols = "6"; textarea.style.border = "none"; textarea.style.resize = "none"; textarea.onfocus = function () { rfb._keyboard.ungrab(); rfb._mouse.ungrab(); } textarea.onblur = function () { rfb._keyboard.grab(); rfb._mouse.grab(); } textarea.oninput = function () { textarea.value = clearNonASCIIChar(textarea.value); } CapsLockButton.type = "button"; CapsLockButton.value = "CapsLock"; CapsLockButton.id = "CapsLockButton"; CapsLockButton.style.display = "inline"; CapsLockButton.disabled = true; let addButton = function addButton() { if (!document.getElementById("noVNC_buttons")) { setTimeout(addButton, 25); return; } document.getElementById("noVNC_buttons").appendChild(textarea); document.getElementById("noVNC_buttons").appendChild(pasteButton); document.getElementById("noVNC_buttons").appendChild(CapsLockButton); let enableButton = function enableButton() { if (!document.getElementById("noVNC_canvas") || document.getElementById("noVNC_canvas").height == 20) { setTimeout(enableButton, 25); return; } pasteButton.disabled = false; pasteButton.onclick = function () { let self = pasteButton.onclick; textarea.value = clearNonASCIIChar(textarea.value); let text = textarea.value; textarea.value = ""; textarea.disabled = true; textarea.placeholder = "Busy"; pasteButton.value = "Stop"; let stop = sendString(text, function () { pasteButton.onclick = self; pasteButton.value = "Paste"; textarea.disabled = false; textarea.placeholder = "Paste"; }); pasteButton.onclick = function () { stop(); } } CapsLockButton.disabled = false; CapsLockButton.onclick = function () { rfb.sendKey(XK_Caps_Lock, 1); } } setTimeout(enableButton, 0); } setTimeout(addButton, 0); })();