myUtils

自分用、dom取得等の機能追加。

当前为 2022-06-17 提交的版本,查看 最新版本

此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/435697/1061664/myUtils.js

  1. // ==UserScript==
  2. // @name myUtils
  3. // @description 自分用、dom取得等の機能追加。
  4. // @include *
  5. // @noframes
  6. // ==/UserScript==
  7. window.my=new class {
  8. constructor(){
  9. Node.prototype.on=function(){
  10. addEventListener.apply(this,arguments);
  11. return this
  12. }
  13. const e=document.head.nextElementSibling;
  14. if(e.hasAttribute('my-zone')) this.zone=e;
  15. else{
  16. const z=document.createElement('div');
  17. z.setAttribute('my-zone','');
  18. z.className="fucking-zhihu-sucks"
  19. document.head.after(this.zone=z);
  20. }
  21. this.addStyle(`#my-btn-container{display:flex;flex-wrap:wrap;z-index:1650729359811;position:fixed!important;right:0;top:0}.my-btn{user-select: none!important}`,'my-css-for-btns fucking-zhihu-sucks');
  22. }
  23. //dependency:after,zone
  24. addStyle(css,className='fucking-zhihu-sucks'){
  25. return this.append('style',this.zone,css,`class`,className)
  26. }
  27. append(tag,dom,content){
  28. if(!tag) return;
  29. const son=typeof tag==='string'?
  30. document.createElement(tag):tag instanceof HTMLElement||tag instanceof DocumentFragment?
  31. tag:0;
  32. let len=arguments.length;
  33. dom instanceof Node?dom.append(son):0;
  34. if(content)son.append(content);
  35. while(len>3){
  36. son.setAttribute([arguments[len-2]],arguments[len-1]);len-=2
  37. }return son;
  38. }
  39. //my.append('tag',document.body,'content','idk','true','data-s')
  40.  
  41. after(tag,dom,content){
  42. if(!tag) return;
  43. const bro=typeof tag==='string'?
  44. document.createElement(tag):tag instanceof Node?
  45. tag:0;
  46. let len=arguments.length;
  47. dom instanceof Node?dom.after(bro):0;
  48. if(content)bro.append(content);
  49. while(len>3){
  50. bro.setAttribute([arguments[len-2]],arguments[len-1]);len-=2
  51. }return bro;
  52. }
  53. //my.after('div',document.body,'','suck','1','dick',000)
  54.  
  55. before(tag,dom,content){
  56. if(!tag) return;
  57. const bro=typeof tag==='string'?
  58. document.createElement(tag):tag instanceof Node?
  59. tag:0;
  60. let len=arguments.length;
  61. dom instanceof Node?dom.before(bro):0;
  62. if(content)bro.append(content);
  63. while(len>3){
  64. bro.setAttribute([arguments[len-2]],arguments[len-1]);len-=2
  65. }return bro;
  66. }
  67. // my.before('div',document.head,'','suck','1','dick')
  68.  
  69. //enable or disable style with class
  70. switchStyle(...styleQueryRule){
  71. styleQueryRule.forEach(e=>{
  72. this.zone.querySelectorAll('style'+e).forEach(e=>{
  73. e.type!='0'?e.type=0:e.type="";
  74. });
  75. })
  76. }
  77.  
  78. seconds2date(seconds){
  79. const date=new Date(seconds),year=date.getFullYear(),month=date.getMonth()+1,day=date.getDate(),
  80. hour=date.getHours(),minute=date.getMinutes(),second=date.getSeconds(),milliseconds=date.getMilliseconds(),currentTime=year+"-"+month+"-"+day+" "+hour+":"+minute+":"+second+":"+milliseconds;
  81. return currentTime
  82. }
  83. //my.seconds2date(new Date().getTime())
  84.  
  85. //跳出登录框后再执行
  86. fuckTiebaLogin(userName,password){
  87. document.getElementById('TANGRAM__PSP_5__footerULoginBtn').click();
  88. document.getElementById('TANGRAM__PSP_5__userName').outerHTML+='';
  89. document.getElementById('TANGRAM__PSP_5__password').outerHTML+='';
  90. document.getElementById('TANGRAM__PSP_5__userName').value=userName;
  91. document.getElementById('TANGRAM__PSP_5__password').value=password;
  92. return document.getElementById('TANGRAM__PSP_5__submit').click();
  93. }
  94.  
  95. getValue(k,aDefault){
  96. const val=localStorage.getItem("XB_"+k)
  97. if (!val && 'undefined' != typeof aDefault) return aDefault;
  98. return val;
  99. }
  100.  
  101. setValue(k, v){
  102. localStorage.setItem("XB_"+k, v);
  103. }
  104. //setValue('k', 'v')
  105.  
  106. deleteValue(k){
  107. if(k.indexOf("XB_")!=-1) localStorage.removeItem(k);
  108. }
  109. //deleteValue('k')
  110.  
  111. listValues(){
  112. let list=[],j=0,k,l=localStorage.length;
  113. for (let i=0;i<l;i++) {
  114. k=localStorage.key(i);
  115. if(k.indexOf("XB_")!=-1) list[j++]=localStorage.key(i)
  116. }return list
  117. }
  118.  
  119. //dependency:listValues
  120. clearValues(){
  121. this.listValues().forEach(e=>{
  122. localStorage.removeItem(e)
  123. })
  124. }
  125.  
  126. //get len of json obj
  127. getJsonLen(jsonObj){
  128. let jsonLen=0, key;
  129. for (key in jsonObj) {
  130. if (jsonObj.hasOwnProperty(key)) jsonLen++;
  131. }return jsonLen;
  132. }
  133.  
  134. //syn console.log
  135. log(text){
  136. console.log(JSON.stringify(text))
  137. }
  138.  
  139. //dependency:addStyle,append
  140. addBtns(...params){
  141. const z=this.zone,myDiv=z.querySelector('#my-btn-container')||this.append('div',z,'',`id`,'my-btn-container',`class`,'fucking-zhihu-sucks'),btns=[],l=params.length;
  142. for(let i=0;i<l;){
  143. const btn=typeof params[i]==="function"?
  144. this.append('button',myDiv,params[i].name+'|','class','my-btn').on('click',params[i++]):
  145. this.append('button',myDiv,params[i++]+'|','class','my-btn').on('click',params[i++]);
  146. btns[btns.length]=btn
  147. }return btns
  148. }
  149. //my.addBtns(()=>{},"func1",e=>{confirm(e.target.id)},function(e){prompt(e.target.outerHTML)},function test(e){return 1})
  150.  
  151. //dependency:addStyle,append
  152. addAs(...args){
  153. const z=this.zone,myDiv=z.querySelector('#my-btn-container')||this.append('div',z,'',`id`,'my-btn-container',`class`,'fucking-zhihu-sucks');
  154. for(let i=0;i<args.length;i+=2){
  155. this.append('a',myDiv,args[i]+'|',`href`,args[i+1]);
  156. }
  157. }
  158. //my.addAs("哔哩哔哩","https://www.bilibili.com/","百度","https://www.baidu.com/")
  159.  
  160. //prevent document.title from being changed
  161. fixTitle(){
  162. Object.defineProperty(document,"title",{
  163. writable:false
  164. })
  165. }
  166. }