Kquery

Add_iframe WaitingElement and more

此脚本不应直接安装,它是一个供其他脚本使用的外部库。如果您需要使用该库,请在脚本元属性加入:// @require https://update.cn-greasyfork.org/scripts/522187/1532433/Kquery.js

  1. // ==UserScript==
  2. // @name Kquery
  3. // @version 2025.02.06
  4. // @description Add_iframe WaitingElement and more
  5. // @author You
  6. // @grant none
  7. // @grant GM_getValue
  8. // @grant GM_setValue
  9. // @grant GM_deleteValue
  10. // @grant GM_download
  11. // @require https://ajax.aspnetcdn.com/ajax/jquery/jquery-3.5.1.min.js
  12. // ==/UserScript==
  13.  
  14. /**
  15. * 添加一个iframe的类
  16. * @class
  17. * @example
  18. const mi = new My_iframe();
  19. mi.Add_iframe(url)
  20. .then(iframe=>{
  21. const id = mi.GetDocument();
  22. const img = $(id).find("img")
  23. });
  24. */
  25. function My_iframe(){
  26. let iframe = null;
  27. this.Add_iframe = async(url)=>{
  28. return new Promise((resolve,reject)=>{
  29. // 创建一个iframe元素
  30. iframe = document.createElement('iframe');
  31. // 设置iframe的宽度和高度
  32. iframe.width = '1px';
  33. iframe.height = '1px';
  34. // 设置iframe的src属性,指向你想要打开的URL
  35. iframe.src = url; // 请替换为你想要加载的URL
  36. // 将iframe添加到页面的body中
  37. document.body.appendChild(iframe);
  38. // 等待iframe加载完成后再操作它
  39. iframe.onload = function() {
  40. resolve(iframe);
  41. };
  42. iframe.onerror = function(){
  43. $(iframe).remove();
  44. reject(url);
  45. }
  46. })
  47. }
  48. this.GetDocument = ()=>{
  49. if(!iframe){return false;}
  50. return iframe.contentWindow.document;
  51. }
  52. }
  53. /**
  54. * 等待一个元素加载完毕的方法
  55. * @param {function():JQuery} GetEle -获取元素的方法
  56. * @example
  57. const GetEle = ()=>$("img");
  58. WaitingElement(GetEle)
  59. .then(tag=>{
  60. })
  61. */
  62. async function WaitingElement(GetEle){
  63. return new Promise(resolve=>{
  64. let ele = GetEle();
  65. if(ele.length>0){resolve(ele);}else{
  66. let check = setInterval(()=>{
  67. let ele = GetEle();
  68. if(ele.length>0){
  69. resolve(ele);
  70. clearInterval(check);
  71. }
  72. },100)
  73. }
  74. })
  75. }
  76.  
  77. /**
  78. * 在网页底部出现调试的方法
  79. * @param {string} mess -要显示的信息
  80. * @param {JQuery} item -要显示在什么元素上(可选)
  81. * @example
  82. ConsoleWrite("error");
  83. */
  84. function ConsoleWrite(mess,item){
  85. if(item.length>0){item.text(mess);return item;}
  86. let div = $(".console");
  87. if(div.length==0){
  88. div = `
  89. <div class="console"></div>
  90. <style>
  91. .console{
  92. position:fixed;
  93. width:100%;
  94. background:black;
  95. color:white;
  96. bottom:0;
  97. }
  98. </style>
  99. `
  100. $('body').append(div);
  101. div = $(".console");
  102. div.on('touchstart',function(){$(this).hide()});
  103. }
  104. div.text(mess);
  105. return div;
  106. }
  107.  
  108. /**
  109. * 添加按键控制网页
  110. * @example
  111. const kc = new KeyControler();
  112. kc.AddEvent({
  113. upItem:$("up");
  114. downItem:$("down");
  115. leftItem:$("left");
  116. rightItem:$("right");
  117. closew:$("close");
  118. })
  119. kc.RemoveEvent();
  120. */
  121. function KeyControler() {
  122. let Events = [];
  123. this.downItem = $('<a></a>').click(function () {
  124. var currentScroll = document.documentElement.scrollTop;
  125. var scrollDistance = $(window).height() / 2;
  126. console.log(currentScroll);
  127. window.scrollTo(0, currentScroll + scrollDistance);
  128. });
  129. this.upItem = $('<a></a>').click(function () {
  130. var currentScroll = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;
  131. var scrollDistance = window.innerHeight / 2;
  132. window.scrollTo(0, currentScroll - scrollDistance);
  133. });
  134.  
  135. this.Event = (args, event) => {
  136. if (!args.upItem) { args.upItem = this.upItem; }
  137. if (!args.downItem) { args.downItem = this.downItem; }
  138.  
  139. switch (event.key) {
  140. case 'ArrowLeft':
  141. if (args.leftItem && args.leftItem.length > 0) {
  142. args.leftItem[0].click();
  143. console.log('Left arrow key pressed');
  144. }
  145. break;
  146. case 'ArrowRight':
  147. if (args.rightItem && args.rightItem.length > 0) {
  148. args.rightItem[0].click();
  149. console.log('Right arrow key pressed');
  150. }
  151. break;
  152. case 'ArrowUp':
  153. if (args.upItem && args.upItem.length > 0) {
  154. args.upItem[0].click();
  155. console.log('Up arrow key pressed');
  156. }
  157. break;
  158. case 'ArrowDown':
  159. if (args.downItem && args.downItem.length > 0) {
  160. args.downItem[0].click();
  161. console.log('Down arrow key pressed');
  162. }
  163. break;
  164. case '0':
  165. if (typeof closew !== 'undefined' && args.closew) {
  166. window.close();
  167. console.log('Window closed');
  168. }
  169. break;
  170. default:
  171. break;
  172. }
  173. };
  174.  
  175. this.AddEvent = (args) => {
  176. const eventHandler = (event) => {
  177. this.Event(args, event);
  178. };
  179. document.addEventListener('keydown', eventHandler);
  180. Events.push(eventHandler);
  181. };
  182.  
  183. this.RemoveEvent = () => {
  184. Events.forEach(handler => {
  185. document.removeEventListener("keydown", handler);
  186. });
  187. Events = [];
  188. };
  189. }
  190.