InjectJS

Inject javascript into almost every website you visit.

目前為 2022-12-01 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name InjectJS
  3. // @namespace http://tampermonkey.net/
  4. // @version 1.10
  5. // @description Inject javascript into almost every website you visit.
  6. // @author YTXaos
  7. // @match *://*/*
  8. // @icon https://raw.githubusercontent.com/YTXaos/InjectJS/main/assets/logo.png
  9. // @grant none
  10. // @license MIT
  11. // @require https://code.jquery.com/jquery-3.6.0.min.js
  12. // ==/UserScript==
  13.  
  14. (function() {
  15. "use strict";
  16. const url = location.href, origin = location.origin;
  17. function onURL(page) {
  18. return url === `${origin}${page}`;
  19. }
  20. if(onURL("/inject-js/")) {
  21. alert(`If you're looking for the options go to ${origin}/inject-js/options`);
  22. return;
  23. }
  24. console.info("InjectJS Loaded. Press Ctrl + Q to topen");
  25. const popup = document.createElement("div"), style = document.createElement("style");
  26. fetch("https://raw.githubusercontent.com/YTXaos/InjectJS/main/assets/main.css").then(get => get.text()).then(set => style.innerHTML = set);
  27. popup.setAttribute("class", "js-injector-popup");
  28. popup.setAttribute("style", "display: none;");
  29. popup.innerHTML = `
  30. <label class="js-inject-header">
  31. <div class="js-logo-needle">.....</div>
  32. Inject<span class="js-logo">JS</span></label>
  33. <textarea placeholder="Your code here" class="js-code-inject" spellcheck="off" data-gramm="false" data-gramm_editor="false" data-enable-grammarly="false"></textarea>
  34. <button class="execute-code" disabled>Execute</button>`;
  35. document.head.prepend(style);
  36. document.body.prepend(popup);
  37. function OptionsPage() {
  38. $("link[rel=stylesheet], style").remove();
  39. document.title = "InjectJS Options";
  40. const script = document.createElement("script"), jquery = document.createElement("script");
  41. fetch("https://raw.githubusercontent.com/YTXaos/InjectJS/main/pages/options.html").then(get => get.text()).then(set => document.body.innerHTML = set);
  42. fetch("https://raw.githubusercontent.com/YTXaos/InjectJS/main/options.js").then(get => get.text()).then(set => script.innerHTML = set);
  43. fetch("https://code.jquery.com/jquery-3.6.0.min.js").then(get => get.text()).then(set => jquery.innerHTML = set);
  44. document.head.append(script);
  45. document.head.append(jquery);
  46. }
  47. const code = document.querySelector(".js-code-inject"), btn = document.querySelector(".execute-code");
  48. code.addEventListener("input", CheckCode);
  49. btn.addEventListener("click", InjectCode);
  50. function CheckCode() {
  51. const code = document.querySelector(".js-code-inject");
  52. if(code.value.length < 5) {
  53. btn.setAttribute("disabled", "disabled");
  54. } else {
  55. btn.removeAttribute("disabled");
  56. }
  57. }
  58. function InjectCode() {
  59. const code = document.querySelector(".js-code-inject").value;
  60. const show_alerts = false;
  61. try {
  62. eval(code);
  63. } catch(e) {
  64. if(show_alerts) {
  65. alert(e.message);
  66. } else {
  67. console.error(e.message);
  68. }
  69. }
  70. }
  71. function ShowInjector(event) {
  72. dragElement(document.querySelector(".js-injector-popup"));
  73. function dragElement(elmnt) {
  74. var pos1 = 0, pos2 = 0, pos3 = 0, pos4 = 0;
  75. if (document.querySelector(".js-inject-header")) {
  76. document.querySelector(".js-inject-header").onmousedown = dragMouseDown;
  77. } else {
  78. elmnt.onmousedown = dragMouseDown;
  79. }
  80. function dragMouseDown(e) {
  81. e = e || window.event;
  82. e.preventDefault();
  83. pos3 = e.clientX;
  84. pos4 = e.clientY;
  85. document.onmouseup = closeDragElement;
  86. document.onmousemove = elementDrag;
  87. }
  88. function elementDrag(e) {
  89. e = e || window.event;
  90. e.preventDefault();
  91. pos1 = pos3 - e.clientX;
  92. pos2 = pos4 - e.clientY;
  93. pos3 = e.clientX;
  94. pos4 = e.clientY;
  95. // set the element's new position:
  96. elmnt.style.top = (elmnt.offsetTop - pos2) + "px";
  97. elmnt.style.left = (elmnt.offsetLeft - pos1) + "px";
  98. }
  99. function closeDragElement() {
  100. document.onmouseup = null;
  101. document.onmousemove = null;
  102. }
  103. }
  104. popup.classList.toggle("show");
  105. }
  106. if(onURL("/inject-js/options")) {
  107. OptionsPage();
  108. }
  109. document.addEventListener("keyup", function(e) {
  110. e.preventDefault();
  111. if(e.ctrlKey && e.which === 81) {
  112. ShowInjector();
  113. }
  114. });
  115. })();