Greasy Fork is available in English.

网页高亮关键字

对网页上的文字进行高亮显示,如果对你有帮助,可以随意修改使用

ही स्क्रिप्ट इंस्टॉल करा?
लेखकाने सुचवलेली स्क्रिप्ट

तुम्हाला कदाचित ही स्क्रिप्टदेखील आवडेल: Greasyfork Utility Toolkit.

ही स्क्रिप्ट इंस्टॉल करा
  1. // ==UserScript==
  2. // @name 网页高亮关键字
  3. // @name:af Merk sleutelwoorde op die web
  4. // @name:am በድር ላይ ቁልፍ ቃላትን ያድኑ
  5. // @name:ar تمييز الكلمات الرئيسية على الويب
  6. // @name:az İnternetdə açar sözləri vurğulayın
  7. // @name:be Вылучыце ключавыя словы ў Інтэрнэце
  8. // @name:bem Landeniko amashiwi ayacindama pa webu
  9. // @name:bg Маркирайте ключови думи в мрежата
  10. // @name:bn ওয়েবে কীওয়ার্ডগুলি হাইলাইট করুন
  11. // @name:bo དྲ་རྒྱའི་ཐོག་གཙོ་ཚིག་གི་མིང་ཚིག་གཙོ་བོ་གསལ་སྟོན་བྱེད་པ།
  12. // @name:bs Označite ključne riječi na webu
  13. // @name:ca Ressalteu les paraules clau al web
  14. // @name:ceb I-highlight ang mga keyword sa web
  15. // @name:ckb وشە سەرەکییەکان لە وێبدا تیشک بخەرە سەر
  16. // @name:cs Zvýrazněte klíčová slova na webu
  17. // @name:cy Tynnu sylw at eiriau allweddol ar y we
  18. // @name:da Fremhæv nøgleord på nettet
  19. // @name:de Markieren Sie Keywords im Web
  20. // @name:dv ވެބްގައި ހުންނަ ކީވޯޑްތައް ހައިލައިޓް ކުރާށެވެ .
  21. // @name:dz ཝེབ་གུ་ ལྡེ་མིག་ཚིག་ཚུ་ གསལ་སྟོན་འབད།
  22. // @name:el Επισημάνετε τις λέξεις -κλειδιά στον ιστό
  23. // @name:en Highlight keywords on the web
  24. // @name:eo Emfazu ŝlosilvortojn en la reto
  25. // @name:es Resaltar las palabras clave en la web
  26. // @name:et Tõstke märksõnad veebis esile
  27. // @name:eu Nabarmendu gako-hitzak sarean
  28. // @name:fa کلمات کلیدی را در وب برجسته کنید
  29. // @name:fi Korosta avainsanoja verkossa
  30. // @name:fo Varpa ljós á lyklaorð á netinum
  31. // @name:fr Mettez en surbrillance des mots clés sur le Web
  32. // @name:gd Comharraich prìomh fhaclan air an lìon
  33. // @name:gl Resalte palabras clave na web
  34. // @name:gu વેબ પર કીવર્ડ્સ હાઇલાઇટ કરો
  35. // @name:haw Nā hua’ōlelo nui ma ka pūnaewele
  36. // @name:he הדגש מילות מפתח באינטרנט
  37. // @name:hi वेब पर कीवर्ड को हाइलाइट करें
  38. // @name:hr Označite ključne riječi na webu
  39. // @name:ht Mete aksan sou mo kle sou entènèt la
  40. // @name:hu Jelölje ki a kulcsszavakat az interneten
  41. // @name:hy Ներկայացրեք հիմնաբառերը համացանցում
  42. // @name:id Sorot kata kunci di web
  43. // @name:is Auðkenndu lykilorð á vefnum
  44. // @name:it Evidenzia le parole chiave sul Web
  45. // @name:ja Web上のキーワードを強調表示します
  46. // @name:ka ხაზს უსვამს საკვანძო სიტყვებს ინტერნეტში
  47. // @name:kk Интернеттегі кілт сөздерді бөлектеңіз
  48. // @name:km គូសចំណាំពាក្យគន្លឹះនៅលើអ៊ីនធឺណិត
  49. // @name:kn ವೆಬ್‌ನಲ್ಲಿ ಕೀವರ್ಡ್‌ಗಳನ್ನು ಹೈಲೈಟ್ ಮಾಡಿ
  50. // @name:ko 웹에서 키워드를 강조 표시합니다
  51. // @name:ku Li ser Webê sereke ronî dike
  52. // @name:ky Интернетте ачкыч сөздөрдү белгилеңиз
  53. // @name:la Highlight Keywords in Web
  54. // @name:lb Highlight Schlësselwieder um Internet
  55. // @name:lo ຈຸດເດັ່ນຂອງຄໍາຫລັກໃນເວັບ
  56. // @name:lt Pabrėžkite raktinius žodžius internete
  57. // @name:lv Iezīmējiet atslēgvārdus tīmeklī
  58. // @name:mg Asongadino ny teny fanalahidy ao amin’ny Internet
  59. // @name:mi Tohu tohu i runga i te paetukutuku
  60. // @name:mk Нагласете клучни зборови на Интернет
  61. // @name:ml വെബിൽ കീവേഡുകൾ ഹൈലൈറ്റ് ചെയ്യുക
  62. // @name:mn Вэб дээрх түлхүүр үгсийг тодруулах
  63. // @name:ms Sorot kata kunci di web
  64. // @name:mt Jenfasizzaw il-kliem kjavi fuq il-web
  65. // @name:my ဝက်ဘ်ပေါ်တွင်သော့ချက်စာလုံးများကိုမီးမောင်းထိုးပြ
  66. // @name:ne वेबमा कुञ्जी शव्दहरू हाइलाइट गर्नुहोस्
  67. // @name:nl Markeer zoekwoorden op internet
  68. // @name:no Uthev nøkkelord på nettet
  69. // @name:ny Unikani mawu osakira pa intaneti
  70. // @name:pa ਵੈੱਬ ’ਤੇ ਕੀਵਰਡ ਨੂੰ ਹਾਈਲਾਈਟ ਕਰੋ
  71. // @name:pap Resalta palabranan clave riba e web .
  72. // @name:pl Podświetl słowa kluczowe w Internecie
  73. // @name:ps په ویب کې د کلیدي ټکي روښانه کړئ
  74. // @name:pt Destaque palavras -chave na web
  75. // @name:ro Evidențiați cuvinte cheie pe web
  76. // @name:ru Выделите ключевые слова в Интернете
  77. // @name:rw Shyira ahagaragara ijambo ryibanze kurubuga
  78. // @name:sg Akota tënë so ayeke na ndo ti web .
  79. // @name:si වෙබයේ මූල පද ඉස්මතු කරන්න
  80. // @name:sk Zvýraznite kľúčové slová na webe
  81. // @name:sl Označite ključne besede na spletu
  82. // @name:sm Faailoga upu i luga o le upega tafailagi
  83. // @name:sn Simbisa mazwi makuru pawebhu
  84. // @name:so Muuji ereyada furaha ah ee shabakadda
  85. // @name:sr Означите кључне речи на вебу
  86. // @name:sv Markera nyckelord på webben
  87. // @name:sw Onyesha maneno muhimu kwenye wavuti
  88. // @name:ta வலையில் முக்கிய வார்த்தைகளை முன்னிலைப்படுத்தவும்
  89. // @name:te వెబ్‌లో కీలకపదాలను హైలైట్ చేయండి
  90. // @name:tg Калимаҳои калидӣ дар веб
  91. // @name:th เน้นคำหลักบนเว็บ
  92. // @name:ti ኣብ መርበብ ሓበሬታ ቁልፊ ቃላት ኣጉልሕ
  93. // @name:tk Webde açar sözleri belläň
  94. // @name:tn Tlhagisa mafoko a botlhokwa mo webong
  95. // @name:to Fakaʻilongaʻi ʻa e ngaahi lea mahuʻinga ʻi he uepi .
  96. // @name:tpi Hailait ki-wod long web
  97. // @name:tr Web’deki anahtar kelimeleri vurgulayın
  98. // @name:uk Виділіть ключові слова в Інтернеті
  99. // @name:ur ویب پر کلیدی الفاظ کو اجاگر کریں
  100. // @name:uz Internetdagi kalit so’zlarni ajratib ko’rsatish
  101. // @name:vi Đánh dấu các từ khóa trên web
  102. // @name:xh Gxininisa amagama aphambili kwiwebhu
  103. // @name:yi הויכפּונקט טערמינען אויף די וועב
  104. // @name:zh 网页高亮关键字
  105. // @name:zh-CN 网页高亮关键字
  106. // @name:zh-HK 網頁高亮關鍵字
  107. // @name:zh-MO 網頁高亮關鍵字
  108. // @name:zh-MY 网页高亮关键字
  109. // @name:zh-SG 网页高亮关键字
  110. // @name:zh-TW 網頁高亮關鍵字
  111. // @name:zu Qokomisa amagama angukhiye kuwebhu
  112. // @description 对网页上的文字进行高亮显示,如果对你有帮助,可以随意修改使用
  113. // @description:af Merk die teks op die webblad. As dit u nuttig is, kan u dit verander soos u wil.
  114. // @description:am በድር ገጽ ላይ ያለውን ጽሑፍ ያደምቁ. ለእርስዎ ጠቃሚ ከሆነ, እርስዎ እንደወደዱት ማሻሻል ይችላሉ.
  115. // @description:ar قم بتمييز النص على صفحة الويب. إذا كان الأمر مفيدًا لك ، فيمكنك تعديله كما تريد.
  116. // @description:az Veb səhifədəki mətni vurğulayın. Sizin üçün faydalıdırsa, istədiyiniz kimi dəyişdirə bilərsiniz.
  117. // @description:be Вылучыце тэкст на вэб -старонцы. Калі гэта вам карысна, вы можаце змяніць яго так, як вам падабаецца.
  118. // @description:bem Ukulanga ifilembo pe buula lya webu. Nga ca kutila kuti camwafwa, kuti mwacipilibula nga fintu mulefwaya.
  119. // @description:bg Маркирайте текста на уеб страницата. Ако ви е полезно, можете да го промените както искате.
  120. // @description:bn ওয়েব পৃষ্ঠায় পাঠ্য হাইলাইট করুন। যদি এটি আপনার পক্ষে সহায়ক হয় তবে আপনি এটি আপনার পছন্দ মতো সংশোধন করতে পারেন।
  121. // @description:bo དྲ་ངོས་ཀྱི་ཡིག་ཆ་དེ་གསལ་པོར་བསྟན་དགོས། གལ་ཏེ་ཁྱེད་ལ་ཕན་ཐོགས་ཡོད་ན། ཁྱེད་ཀྱིས་འདོད་པ་ལྟར་བསྒྱུར་བཅོས་གཏོང་ཐུབ།
  122. // @description:bs Označite tekst na web stranici. Ako vam je korisno, možete ga modificirati kako želite.
  123. // @description:ca Ressalteu el text a la pàgina web. Si us és útil, podeu modificar -lo com vulgueu.
  124. // @description:ceb Ipasiugda ang teksto sa panid sa web. Kung makatabang kini kanimo, mahimo nimong usbon kini sumala sa gusto nimo.
  125. // @description:ckb دەقەکە لە وێب پەیجەکەدا تیشک بخەرە سەر. ئەگەر بۆت یارمەتیدەر بێت، دەتوانیت دەستکاری بکەیت بەو شێوەیەی کە حەزت لێیە.
  126. // @description:cs Zvýrazněte text na webové stránce. Pokud je to pro vás užitečné, můžete jej upravit, jak chcete.
  127. // @description:cy Tynnwch sylw at y testun ar y dudalen we. Os yw’n ddefnyddiol i chi, gallwch ei addasu fel y dymunwch.
  128. // @description:da Fremhæv teksten på websiden. Hvis det er nyttigt for dig, kan du ændre det, som du vil.
  129. // @description:de Markieren Sie den Text auf der Webseite. Wenn es Ihnen hilfreich ist, können Sie es so ändern, wie Sie möchten.
  130. // @description:dv ވެބް ޕޭޖްގައިވާ ލިޔުން ފާހަގަކޮށްލާށެވެ. އެއީ ތިމާއަށް އެހީތެރިވެދޭ އެއްޗެއް ނަމަ، ތިމާ ބޭނުން ގޮތަކަށް ބަދަލު ކުރެވިދާނެ އެވެ.
  131. // @description:dz ཝེབ་ཤོག་ལེབ་གུ་ཡོད་པའི་ཚིག་ཡིག་འདི་གཙོ་བོར་བཏོན། ཁྱོད་ལུ་ཕན་ཐོགས་ཡོད་པ་ཅིན་ ཁྱོད་ཀྱིས་འདོད་པ་ཡོད་དོ་བཟུམ་སྦེ་ བཟོ་བཅོས་འབད་ཚུགས།
  132. // @description:el Επισημάνετε το κείμενο στην ιστοσελίδα. Εάν είναι χρήσιμο για εσάς, μπορείτε να το τροποποιήσετε όπως θέλετε.
  133. // @description:en Highlight the text on the web page. If it is helpful to you, you can modify it as you like.
  134. // @description:eo Emfazu la tekston en la retpaĝo. Se ĝi helpas vin, vi povas modifi ĝin kiel vi ŝatas.
  135. // @description:es Resalte el texto en la página web. Si es útil para usted, puede modificarlo como desee.
  136. // @description:et Tõstke esile veebilehel olev tekst. Kui see on teile abiks, saate seda muuta nii, nagu soovite.
  137. // @description:eu Nabarmendu testua web orrian. Zuretzat lagungarria bada, nahi duzun bezala alda dezakezu.
  138. // @description:fa متن را در صفحه وب برجسته کنید. اگر برای شما مفید است ، می توانید آن را همانطور که دوست دارید اصلاح کنید.
  139. // @description:fi Korosta verkkosivustolla oleva teksti. Jos siitä on hyötyä sinulle, voit muokata sitä haluamallasi tavalla.
  140. // @description:fo Varpa ljós á tekstin á heimasíðuni. Um tað er til gagns fyri teg, kanst tú broyta tað, sum tú vilt.
  141. // @description:fr Mettez en surbrillance le texte sur la page Web. Si cela vous est utile, vous pouvez le modifier comme vous le souhaitez.
  142. // @description:gd Comharraich an teacsa air an duilleag-lìn. Ma tha e cuideachail dhut, faodaidh tu a dhèanamh dìreach mar as toil leat.
  143. // @description:gl Resalte o texto na páxina web. Se che resulta útil, podes modificalo como queiras.
  144. // @description:gu વેબ પૃષ્ઠ પરના ટેક્સ્ટને હાઇલાઇટ કરો. જો તે તમારા માટે મદદરૂપ છે, તો તમે તેને ગમે તે રીતે સુધારી શકો છો.
  145. // @description:haw Mālama i ka hua’ōlelo ma kaʻaoʻao pūnaewele. Inā he kōkua iāʻoe, hiki iāʻoe ke hoʻololi iāʻoe e like me kāu e makemake ai.
  146. // @description:he הדגש את הטקסט בדף האינטרנט. אם זה מועיל לך, אתה יכול לשנות את זה כרצונך.
  147. // @description:hi वेब पेज पर पाठ को हाइलाइट करें। यदि यह आपके लिए मददगार है, तो आप इसे अपनी पसंद के अनुसार संशोधित कर सकते हैं।
  148. // @description:hr Označite tekst na web stranici. Ako vam je korisno, možete ga izmijeniti kako želite.
  149. // @description:ht Mete aksan sou tèks la sou paj wèb la. Si li itil pou ou, ou ka modifye li menm jan ou renmen.
  150. // @description:hu Jelölje ki a szöveget a weboldalon. Ha ez hasznos az Ön számára, akkor módosíthatja azt, ahogy tetszik.
  151. // @description:hy Ներկայացրեք տեքստը համացանցային էջում: Եթե դա օգտակար է ձեզ համար, կարող եք այն փոփոխել այնպես, ինչպես ցանկանում եք:
  152. // @description:id Sorot teks di halaman web. Jika bermanfaat bagi Anda, Anda dapat memodifikasinya sesuka Anda.
  153. // @description:is Auðkenndu textann á vefsíðunni. Ef það er gagnlegt fyrir þig geturðu breytt því eins og þú vilt.
  154. // @description:it Evidenzia il testo nella pagina Web. Se ti è utile, puoi modificarlo come preferisci.
  155. // @description:ja Webページのテキストを強調表示します。それがあなたに役立つなら、あなたはあなたが好きなようにそれを変更することができます。
  156. // @description:ka მონიშნეთ ტექსტი ვებ - გვერდზე. თუ ეს თქვენთვის სასარგებლოა, შეგიძლიათ შეცვალოთ ის, როგორც გსურთ.
  157. // @description:kk Веб-беттегі мәтінді бөлектеңіз. Егер сізге пайдалы болса, оны өзіңіз қалағандай өзгерте аласыз.
  158. // @description:km បន្លិចអត្ថបទនៅលើគេហទំព័រ។ ប្រសិនបើវាមានប្រយោជន៍សម្រាប់អ្នកអ្នកអាចកែប្រែវាតាមដែលអ្នកចូលចិត្ត។
  159. // @description:kn ವೆಬ್ ಪುಟದಲ್ಲಿನ ಪಠ್ಯವನ್ನು ಹೈಲೈಟ್ ಮಾಡಿ. ಇದು ನಿಮಗೆ ಸಹಾಯಕವಾಗಿದ್ದರೆ, ನೀವು ಬಯಸಿದಂತೆ ನೀವು ಅದನ್ನು ಮಾರ್ಪಡಿಸಬಹುದು.
  160. // @description:ko 웹 페이지의 텍스트를 강조 표시하십시오. 도움이되면 원하는대로 수정할 수 있습니다.
  161. // @description:ku Li ser rûpelê malperê nivîsê ronî bikin. Heke ji we re kêrhatî ye, hûn dikarin wekî ku hûn dixwazin biguherînin.
  162. // @description:ky Веб баракчанын текстин белгилеңиз. Эгер сизге пайдалуу болсо, анда сиз аны сизге жаккан сайын өзгөртө аласыз.
  163. // @description:la Highlight textus in textus page. Si est utile vobis, vos can muto ut vos.
  164. // @description:lb Markéiert den Text op der Websäit. Wann et Iech hëllefräich ass, kënnt Dir et änneren wéi Dir wëllt.
  165. // @description:lo ເນັ້ນຂໍ້ຄວາມໃນຫນ້າເວັບ. ຖ້າມັນເປັນປະໂຫຍດຕໍ່ທ່ານ, ທ່ານສາມາດດັດແປງມັນຕາມທີ່ທ່ານຕ້ອງການ.
  166. // @description:lt Pažymėkite tekstą tinklalapyje. Jei tai jums naudinga, galite jį modifikuoti taip, kaip jums patinka.
  167. // @description:lv Iezīmējiet tekstu tīmekļa lapā. Ja tas jums ir noderīgi, varat to modificēt tā, kā vēlaties.
  168. // @description:mg Asongadino ny lahatsoratra ao amin’ny pejy web. Raha mahasoa anao izany dia afaka manova azy araka izay tianao.
  169. // @description:mi Miramirahia te tuhinga ki te wharangi Tukutuku. Mena he pai ki a koe, ka taea e koe te whakarereke i te mea e pai ana koe.
  170. // @description:mk Означете го текстот на веб -страницата. Ако ви е корисно, можете да го измените како што сакате.
  171. // @description:ml വെബ് പേജിലെ വാചകം ഹൈലൈറ്റ് ചെയ്യുക. ഇത് നിങ്ങൾക്ക് സഹായകരമാണെങ്കിൽ, നിങ്ങൾക്ക് ഇഷ്ടമുള്ളതുപോലെ ഇത് പരിഷ്കരിക്കാനാകും.
  172. // @description:mn Вэб хуудсан дээрх текстийг тодруулна уу. Хэрэв танд тустай бол та хүссэн хэмжээгээрээ өөрчилж болно.
  173. // @description:ms Sorot teks di laman web. Jika ia membantu anda, anda boleh mengubahnya seperti yang anda suka.
  174. // @description:mt Jenfasizza t-test fuq il-paġna tal-web. Jekk huwa ta ’għajnuna għalik, tista’ timmodifikaha kif tixtieq.
  175. // @description:my ဝက်ဘ်စာမျက်နှာပေါ်ရှိစာသားကိုမီးမောင်းထိုးပြပါ။ ၎င်းသည်သင့်အတွက်အထောက်အကူဖြစ်လျှင်သင်ကြိုက်သလောက်သင်ပြုပြင်နိုင်သည်။
  176. // @description:ne वेब पृष्ठमा पाठ हाइलाइट गर्नुहोस्। यदि यो तपाईंलाई सहयोगी छ भने, तपाईं यसलाई यसलाई परिवर्तन गर्न सक्नुहुनेछ जस्तो तपाईंलाई मनपर्दछ।
  177. // @description:nl Markeer de tekst op de webpagina. Als het nuttig voor u is, kunt u het aanpassen zoals u wilt.
  178. // @description:no Uthev teksten på websiden. Hvis det er nyttig for deg, kan du endre det som du vil.
  179. // @description:ny Tsimikizirani lembalo patsamba lawebusayiti. Ngati ndizothandiza kwa inu, mutha kusintha momwe mukufuna.
  180. // @description:pa ਵੈਬ ਪੇਜ ’ਤੇ ਟੈਕਸਟ ਨੂੰ ਹਾਈਲਾਈਟ ਕਰੋ. ਜੇ ਇਹ ਤੁਹਾਡੇ ਲਈ ਮਦਦਗਾਰ ਹੈ, ਤੁਸੀਂ ਇਸ ਨੂੰ ਆਪਣੀ ਪਸੰਦ ਅਨੁਸਾਰ ਬਦਲ ਸਕਦੇ ਹੋ.
  181. // @description:pap Resaltá e teksto riba e página web. Si e ta útil pa bo, bo por modifiká esaki manera bo ke.
  182. // @description:pl Podświetl tekst na stronie internetowej. Jeśli jest to dla Ciebie pomocne, możesz go zmodyfikować tak, jak chcesz.
  183. // @description:ps په ویب پا on ه کې متن روښانه کړئ. که دا ستاسو سره ګټور وي، نو تاسو کولی شئ دا تعدیل کړئ لکه څنګه چې تاسو غواړئ.
  184. // @description:pt Destaque o texto na página da web. Se for útil para você, você pode modificá -lo como quiser.
  185. // @description:ro Evidențiați textul de pe pagina web. Dacă vă este util, îl puteți modifica după cum doriți.
  186. // @description:ru Выделите текст на веб -странице. Если это полезно для вас, вы можете изменить его по своему усмотрению.
  187. // @description:rw Shyira ahagaragara inyandiko kurupapuro. Niba bigufasha, urashobora kugihindura uko ubishaka.
  188. // @description:sg Fa atënë so ayeke na ndo ti lembeti ti Internet. Tongana a mû maboko na mo, mo lingbi ti changé ni tongana ti so mo ye.
  189. // @description:si වෙබ් පිටුවේ පෙළ ඉස්මතු කරන්න. එය ඔබට ප්රයෝජනවත් නම්, ඔබට කැමති පරිදි එය වෙනස් කළ හැකිය.
  190. // @description:sk Zvýraznite text na webovej stránke. Ak je to pre vás užitočné, môžete ho upraviť tak, ako chcete.
  191. // @description:sl Označite besedilo na spletni strani. Če vam je v pomoč, ga lahko spremenite, kot želite.
  192. // @description:sm Faapipii le tusitusiga i luga o le itulau itulau. Afai e aoga ia te oe, e mafai ona e suia e te fiafia ai.
  193. // @description:sn Simbisa mavara ari papeji rewebhu. Kana zvichikubatsira iwe, iwe unogona kuvandudza sezvaunoda.
  194. // @description:so Ku muuji qoraalka bogga bogga. Haddii ay waxtar kuu leedahay, waad wax ka badali kartaa sida aad rabto.
  195. // @description:sr Означите текст на веб страници. Ако вам је од помоћи, можете га модификовати како желите.
  196. // @description:sv Markera texten på webbsidan. Om det är till hjälp för dig kan du ändra det som du vill.
  197. // @description:sw Onyesha maandishi kwenye ukurasa wa wavuti. Ikiwa inakusaidia, unaweza kuibadilisha kama unavyopenda.
  198. // @description:ta வலைப்பக்கத்தில் உள்ள உரையை முன்னிலைப்படுத்தவும். இது உங்களுக்கு உதவியாக இருந்தால், நீங்கள் விரும்பியபடி அதை மாற்றலாம்.
  199. // @description:te వెబ్ పేజీలోని వచనాన్ని హైలైట్ చేయండి. ఇది మీకు సహాయపడితే, మీకు నచ్చిన విధంగా దాన్ని సవరించవచ్చు.
  200. // @description:tg Матнро дар сафҳаи веб қайд кунед. Агар он ба шумо муфид бошад, шумо метавонед онро тавре, ки мехоҳед тағир диҳед.
  201. // @description:th ไฮไลต์ข้อความบนหน้าเว็บ หากเป็นประโยชน์กับคุณคุณสามารถแก้ไขได้ตามที่คุณต้องการ
  202. // @description:ti ኣብቲ መርበብ ሓበሬታ ዘሎ ጽሑፍ ኣጉልሕ። ሓጋዚ እንተኾይኑካ ከም ድላይካ ክትቅይሮ ትኽእል ኢኻ።
  203. // @description:tk Teksti web sahypasyndaky teksti görkeziň. Size peýdaly bolsa, şoňa meňzeş siziň ýaly üýtgedip bilersiňiz.
  204. // @description:tn Tlhagisa sekwalwa mo tsebeng ya webo. Fa e le gore e a go thusa, o ka e fetola ka fa o ratang ka teng.
  205. // @description:to Faka’ilonga’i ’a e tohi ’i he peesi uepi. Kapau ʻoku ʻaonga ia kiate koe, te ke lava ʻo fakaleleiʻi ia ʻo hangē ko hoʻo loto ki aí.
  206. // @description:tpi Haelaetem teks long web pej. Sapos em i helpim yu, yu inap senisim olsem yu laikim.
  207. // @description:tr Web sayfasındaki metni vurgulayın. Sizin için yararlısa, istediğiniz gibi değiştirebilirsiniz.
  208. // @description:uk Виділіть текст на веб -сторінці. Якщо це вам корисно, ви можете змінити його, як вам подобається.
  209. // @description:ur ویب صفحے پر متن کو اجاگر کریں۔ اگر یہ آپ کے لئے مددگار ہے تو ، آپ اپنی پسند کے مطابق اس میں ترمیم کرسکتے ہیں۔
  210. // @description:uz Veb-sahifada matnni ajratib oling. Agar sizga foydali bo’lsa, uni xohlaganingizcha o’zgartirishingiz mumkin.
  211. // @description:vi Đánh dấu văn bản trên trang web. Nếu nó hữu ích cho bạn, bạn có thể sửa đổi nó như bạn muốn.
  212. // @description:xh Chaza isicatshulwa kwiphepha lewebhu. Ukuba kuyaluncedo kuwe, ungayiguqula njengoko uthanda.
  213. // @description:yi הויכפּונקט די טעקסט אויף די וועב בלאַט. אויב עס איז נוציק צו איר, איר קענען מאָדיפיצירן עס ווי איר ווילט.
  214. // @description:zh 对网页上的文字进行高亮显示,如果对你有帮助,可以随意修改使用
  215. // @description:zh-CN 对网页上的文字进行高亮显示,如果对你有帮助,可以随意修改使用
  216. // @description:zh-HK 對網頁上的文字進行高亮顯示,如果對你有幫助,可以隨意修改使用
  217. // @description:zh-MO 對網頁上的文字進行高亮顯示,如果對你有幫助,可以隨意修改使用
  218. // @description:zh-MY 对网页上的文字进行高亮显示,如果对你有帮助,可以随意修改使用
  219. // @description:zh-SG 对网页上的文字进行高亮显示,如果对你有帮助,可以随意修改使用
  220. // @description:zh-TW 對網頁上的文字進行高亮顯示,如果對你有幫助,可以隨意修改使用
  221. // @description:zu Qokomisa umbhalo ekhasini le-Web. Uma kusiza kuwe, ungayiguqula ngendlela othanda ngayo.
  222. // @namespace https://github.com/ChinaGodMan/UserScripts
  223. // @version 1.1.2.72
  224. // @author ma bangde,人民的勤务员 <china.qinwuyuan@gmail.com>
  225. // @include *
  226. // @grant GM_addStyle
  227. // @grant GM_registerMenuCommand
  228. // @grant GM_setValue
  229. // @grant GM_getValue
  230. // @require https://cdn.jsdelivr.net/npm/vue@2.6.1/dist/vue.min.js
  231. // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAACXBIWXMAAAsTAAALEwEAmpwYAAAGlklEQVR4nO2de2wURRzHR5CHiEHUAMGofxhfhPhIvZ3fXAunfey2pd2F6BlF2vqItLxMVCKmYEApieGhoKhB411CjNEjBjUVtUYOKK+2s21tSqE3ezQQMRhfiIqCbddse62X0sfd9fa2OPNJfn/dH5f9fnZ29+Y3O4eQQCAQCAQCgUAgEAgEAkEXpolGUYNU6IycoQxqaRu5vfsTge00N88YSxl8oBvE7CnK4Idag8y0/9s5p7HxzispI7uiwxcSUsTBk3ANNeBAf+ELCTajH3VP1xlpGix8IcEm9FZ8h26Qk7GELyQkmfowcekG+TGe8IWEJKEbJEs34Gwi4QsJw4SGYb5ukAvDCV9ISBCdwTLKSEcywhcS4sA00WU6I2uSGbyQECMB0ztaN2CbXeGLkTAIwTbPeN2AnXaH31uMnBZzRxFoOG0SNcielIUfKcqgDvFOTZtrGmXQmOrwIwJ+RTxDQ+6bdQPCToQfEbAW8UqtQWZSA045Fb7OoNK66SMeqQ+Bx2qiOHjm11lT2ohH6plb0xk551z4pO1QGE9FPEINKNEN+Me5yw45w23HTDfICspIp2Phd88pZSEupxYM2OBg8NZlp7OeQTHijWDQczll4HMy/C4BBnkR8UbjII3z1J794EO80XQiY/JQjfMUVdBavoJ4Qo+jcW7zZedIQ5vnasRd45zBCafD1xl8rx8nNyGeqB9G4zy54ZM/aSvGiCf0JDTOk3Tmt1u/tBFP0CQ2zpMgYCniCZ3B0mQ3zhMv2IB4wbS5cR5vUYN8xs3UciBFjfOYw7feCziVNgHxQCiUO44asGMEnfnHuZlaXhHInkRDsNvp0HuLkZ9rj7tvQzywcFvahDIf3lsegOq6kPM3XWqQ89QgmYiX8Et9sLvMD6ZV5TskRyV09RQYKUI8sGxL7rhSH+zqCb+nVgVgX51DzRXKoBzxgDcwY2ypDyr7hu+kBMrgPcQDC7eljSn1wacDhd9TL+9M5Wo22M3F1LI34B1d5ocPhwq/rFcCtl0CNaCZj6nl1atHxRN+WaTWfYK/sTH8UzScfiPiAUkp1OYuz9pX5oPOeCWstWUkwNmGVvfdiBckRavCimY+UH7/nngFlPnBXF9JgkkLn0G7zrCKeAFnz7kFK1qnJaBbQmZCEjZ+nhwJlJEliCckWdvSE36vhJWJjYRNw5RAGbyCeMLj8U7EinqmrwCsaOaDq+4LJiLh1cqE7wkBaxcUxBM4V1vcX/g4Ug+9NDt+CT7ofP1L2BvfdZ/UcDO1HI0kq02DCcCKZj5ckZiEN6twjBIg3GiQKYg3pJzCzKHCx8OU8FbVkCPhp8aw61bEI5KsfRyrAKxo5iPrEpPwdhXsG+Bx8686A9IRj7iz1elYUS/EIwArmjm/YnbcT0elfuh4J0j293nU7KRheBTxiqRoFfGGj63K1ToXrM/YG/9IwO2+II6SAM8jXpnh9Y6VFO10QgKUbglF62cnJMEf7Fq4+y7iGUnRihIOX4mSsHHW/nglLPLjj6x3BxCv3CtrN0iy2jZsAYpVakfRpoyYb8xWh83qtCFeceXnT5MU7Whywte6CuTCjpLXMqpjuPx8wXX4OLNwqqSoLckMH0dKUtT24s3pA16OSn3wVYnfMx7xCsmZNwXL2hE7wsdREko2px/oR0CVCF/Wmu0MH0dJeDxKQqkff/1MAK5AvJIxZ87kVIWPe+4JeYUXHnvDfbjMD9WLt3omIp7xer2jJUV7P5UCJFn7DhcUvLBgO6f7MfTlcItbXrJSabc/fJVKslqclrZwjNPHPGKgYfcsapA/aIiYS1cqdpztf2NZ3S7J8+5y+lhHHNYsIzXg997JrxAxF5crybvMKNoaV9bca50+zhFJPSPu/l6cq211m08tzx3GU462X8pVvR4Px1MJQ0FD6aAb5LeBGiA1x4j5xLN5cZzt6jksa1uJXCD+oWIoakPkHsrgl6FagDWtbvPJ5/JiCl/KKeRjLf5wsVaRWW+OxNoEH2okSNYNNlfLd/q4/pfh99Tho26z+On8iwXI6nmXPLfA6eO6ZKCMfJvoQqhDLW6zaFmUBFk9DzlaodPHdElBw3iR9S9CiUo42EzqSJ5abfWIrUW6Th/PJfsOb30Ysq3VZfFsjkcNaLD+HMetqle5cjX+9lWzg4ZWuD6yUV7boOEzaKxpcYkfU3ZhrbP8b1T02VSDkSZ6LO06275ccPFG2ZFR0aobROdyKaBAIBAIBAKBQCAQCAQCNDD/AhKo6E8dHKXUAAAAAElFTkSuQmCC
  232. // @iconbak https://github.com/ChinaGodMan/UserScripts/raw/main/docs/icon/Scripts%20Icons/icons8-mark-96.png
  233. // @supportURL https://github.com/ChinaGodMan/UserScripts/issues
  234. // @homepageURL https://github.com/ChinaGodMan/UserScripts
  235. // @license MIT
  236.  
  237. // ==/UserScript==
  238. (function () {
  239.  
  240. // 初始化
  241. function initialize() {
  242. let defaultWords = {
  243. 'key_123': {
  244. limit: ['baidu'],
  245. 'info': '汉字测试',
  246. 'words': ['抖音', '快手', '网页', '平台', '的', '最', '一', '个', '多', '服务', '大'],
  247. 'color': '#85d228',
  248. 'textcolor': '#3467eb'
  249.  
  250. },
  251. 'key_124': {
  252. limit: [],
  253. 'info': '数字测试',
  254. 'words': ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'],
  255. 'color': '#48c790',
  256. 'textcolor': '#3467eb'
  257.  
  258. },
  259. 'key_3379656389': {
  260. limit: [],
  261. 'info': '字母测试',
  262. 'words': ['a', 'b', 'c', 'd', 'e', 'f', 't', 'y', 'u', 'i', 'o', 'k', 'j', 'h', 'g', 's', 'z', 'x', 'v', 'n', 'm'],
  263. 'color': '#e33544',
  264. 'textcolor': '#3467eb'
  265. },
  266. 'key_4947181948': {
  267. limit: [],
  268. 'info': '相同的字可以显示各个分组的标题',
  269. 'words': ['的', '最', '一', '个', '多', '服务', '大'],
  270. 'color': '#6e7bdd',
  271. 'textcolor': '#e33544'
  272. }
  273. }
  274. // 设置关键字默认值
  275. if (!GM_getValue('key')) { GM_setValue('key', defaultWords) }
  276. if (Object.keys(GM_getValue('key')).length == 0) { GM_setValue('key', defaultWords) }
  277. // GM_setValue("key",this.defaultWords);
  278.  
  279. let cache = GM_getValue('key')
  280. Object.keys(cache).forEach(key => {
  281. let defult = {
  282. limit: [],
  283. info: '',
  284. words: [],
  285. color: '#85d228'
  286. }
  287. Object.keys(defult).forEach((key2) => {
  288. if (!cache[key][key2]) {
  289. console.log(defult[key2])
  290. cache[key][key2] = defult[key2]
  291. }
  292. })
  293. })
  294.  
  295. GM_setValue('key', cache)
  296. }
  297. /**
  298. * @description: 遍历找出所有文本节点
  299. * @param {*} node
  300. * @return {*} 节点map
  301. */
  302. function textMap(node) {
  303. // 存储文本节点
  304. let nodeMap = new Map()
  305.  
  306. const walker = document.createTreeWalker(node, NodeFilter.SHOW_TEXT, (textNode) => {
  307. if (textNode.parentElement.nodeName === 'SCRIPT' |
  308. textNode.parentElement.nodeName === 'script' |
  309. textNode.parentElement.nodeName === 'style' |
  310. textNode.parentElement.nodeName === 'STYLE' |
  311. textNode.parentElement.className === 'mt_highlight' |
  312. document.querySelector('#mt_seting_box').contains(textNode)
  313. ) {
  314. return NodeFilter.FILTER_SKIP
  315. }
  316.  
  317. if (textNode.data.length < 20) {
  318. return textNode.data.replace(/[\n \t]/g, '').length ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP
  319. }
  320.  
  321. return NodeFilter.FILTER_ACCEPT
  322. })
  323.  
  324. while ((textNode = walker.nextNode())) {
  325. nodeMap.set(textNode, textNode.data)
  326. }
  327.  
  328. return nodeMap
  329. }
  330.  
  331. // 高亮
  332. class HIGHTLIGHT {
  333.  
  334. // 需要高亮的关键字
  335. /**通过规则新建关键字列表,解决一个关键字会存在多个分类中
  336. * 将{
  337. * key1{
  338. * words:[word1,word2]
  339. * },
  340. * key2{
  341. * words:[word3,word4]
  342. * }
  343. * }
  344. * 转换为map{
  345. * word1:key1
  346. * word2:key1
  347. * word4:key2
  348. * word3:key2
  349. * }
  350. * @description:
  351. * @return {map}map{
  352. *
  353. * classesKey=>分类标签,类型string
  354. *
  355. * infoList=>提示词,数组["汉字","字符"]
  356. *
  357. * }
  358. */
  359. static words() {
  360.  
  361. // 转换
  362. let newWords = new Map
  363. Object.keys(GM_getValue('key')).forEach(classesKey => {
  364.  
  365. let info = GM_getValue('key')[classesKey].info
  366. let words = GM_getValue('key')[classesKey].words
  367. let color = GM_getValue('key')[classesKey].color
  368. let limit = GM_getValue('key')[classesKey].limit
  369. let textcolor = GM_getValue('key')[classesKey].textcolor
  370.  
  371. words.forEach(word => {
  372. let infoList = []
  373.  
  374. // 检测是否被多个类目包含,被多个类目包含的关键字会有对应类目的信息
  375. if (newWords.get(word + '')) {
  376. infoList = newWords.get(word + '').infoList
  377. infoList.push(info)
  378. } else {
  379. infoList = [info]
  380. }
  381.  
  382. newWords.set(word + '', {
  383. classesKey,
  384. infoList: infoList,
  385. textcolor,
  386. color,
  387. limit
  388. })
  389. })
  390. })
  391. return newWords
  392. }
  393.  
  394. // 检测正则
  395. static reg() {
  396. let url = window.location.href
  397. let doIt = false
  398. let wordsList = []
  399. let words = this.words()
  400. words.forEach((value, word) => {
  401. // console.log(value.limit);
  402. // 过滤不匹配的
  403. if (value.limit.length == 0 || url.match(new RegExp(`${value.limit.join('|')}`, 'g'))) {
  404. // 添加要筛选的关键字
  405. wordsList.push(word)
  406. }
  407. })
  408. // 过滤后还需不需要检测
  409. wordsList.length ? doIt = true : doIt = false
  410. // console.log(doIt,wordsList);
  411. return {
  412. rule: new RegExp(`(${wordsList.join('|')})`, 'g'),
  413. doIt
  414. }
  415. }
  416.  
  417. // 高亮css
  418. static highlightStyle = `
  419. .mt_highlight{
  420. background-color: rgb(255, 21, 21);
  421. border-radius: 2px;
  422. box-shadow: 0px 0px 1px 1px rgba(0, 0, 0,0.1);
  423. cursor: pointer;
  424. color: white;
  425.  
  426. padding: 1px 1px;
  427. }
  428. `
  429.  
  430. /**
  431. * @description: 返回需要被高亮的节点map{textNode,未来会被修改成目标的值}
  432. * @param {map} nodeMap
  433. * @return {void}
  434. */
  435. static highlight(nodeMap) {
  436. let words = this.words()
  437. let reg = this.reg()
  438. // 没有要高亮的关键字时不执行
  439.  
  440. if (words.size && reg.doIt) {
  441. nodeMap.forEach((value, node) => {
  442. // 正则检测是否符合规则
  443. let newInnerHTML = value.replace(reg.rule, (word) => {
  444. let classesKey = words.get(word).classesKey
  445. let infoList = words.get(word).infoList
  446. let color = words.get(word).color
  447. let textcolor = words.get(word).textcolor
  448.  
  449. // 返回新节点模板
  450. // return `<span class="mt_highlight" classesKey="${classesKey}" title="${infoList.join("\n")}" style="background: ${color};">${word}</span>`
  451.  
  452. return `<span class="mt_highlight" classesKey="${classesKey}" title="${infoList.join('\n')}" style="background: ${color}; color:${textcolor};">${word}</span>`
  453. })
  454. // 是否检测出了
  455. if (value != newInnerHTML) {
  456. // 节点替换
  457. let newNode = document.createElement('span')
  458. newNode.innerHTML = newInnerHTML
  459. node.parentElement.replaceChild(newNode, node)
  460. // 点击复制
  461. newNode.addEventListener('click', (e) => {
  462. navigator.clipboard.writeText(e.target.innerText)
  463. })
  464. }
  465. })
  466. }
  467.  
  468. }
  469.  
  470. }
  471.  
  472. /**
  473. * @description: 动态检测新节点,并执行高亮
  474. * @return {*}
  475. */
  476. function watch() {
  477. // 选择需要观察变动的节点
  478. const targetNode = document.body
  479.  
  480. // 观察器的配置(需要观察什么变动)
  481. const config = { attributes: false, childList: true, subtree: true, characterData: true }
  482.  
  483. // 当观察到变动时执行的回调函数
  484. const callback = function (mutationsList, observer) {
  485. let nodeMap = new Map
  486. setTimeout(() => {
  487. mutationsList.forEach(node => { nodeMap.set(node.target) })
  488. nodeMap.forEach((value, node) => {
  489. doOnce(node)
  490. })
  491. }, 1)
  492. }
  493.  
  494. // 创建一个观察器实例并传入回调函数
  495. const observer = new MutationObserver(callback)
  496.  
  497. // 以上述配置开始观察目标节点
  498. observer.observe(targetNode, config)
  499. }
  500.  
  501. // gui
  502. class GUI {
  503. // 模板
  504. static setingTemplate = String.raw`
  505. <div class="seting_box" v-show="showSeting">
  506. <!-- 顶部选项 -->
  507. <div class="option_box">
  508. <div @click="config_in_add">导入添加</div>
  509. <div @click="config_in">导入覆盖</div>
  510.  
  511. <input type="file" class="config_file" accept=".json" @change="file_read($event)">
  512.  
  513. <div @click="config_out">导出配置文件</div>
  514. <div @click="refresh">刷新</div>
  515. <div class="close_seting" @click="close_seting">关闭</div>
  516. </div>
  517.  
  518. <!-- 规则视图 -->
  519. <div class="rule_list_box" v-for="(value,key) in rule">
  520.  
  521. <!-- 展示视图 -->
  522. <div class="show_box" v-show="!edit[key]" >
  523.  
  524. <!-- 左边 -->
  525. <div class="show_left">
  526.  
  527. <!-- 网站作用域 -->
  528. <div class="words_box" @click="editOn(key)">
  529. <span v-for="(word) in value.limit" :style="{'background': value.color, 'color': value.textcolor}">
  530. {{word}}
  531. </span>
  532. <!-- 没有限制 -->
  533. <span v-if="! value.limit.length" :style="{'background': value.color, 'color': value.textcolor}">
  534. 不限制
  535. </span>
  536. </div>
  537.  
  538. <!-- 类目 -->
  539. <div class="info_box" @click="editOn(key)" :style="{'background': value.color, 'color': value.textcolor}">
  540. {{value.info}}
  541. </div>
  542. <!-- 关键字 -->
  543. <div class="words_box" @click="editOn(key)">
  544. <span v-for="(word) in value.words" :style="{'background': value.color, 'color': value.textcolor}">
  545. {{word}}
  546. </span>
  547. </div>
  548. </div>
  549.  
  550. <!-- 分割线 -->
  551. <div class="line"></div>
  552.  
  553. <!-- 修改颜色和删除 -->
  554. <div class="rule_set_box">
  555. <div class="color_box">
  556. <input type="color"
  557. :colorKey="key"
  558. v-model="value.color"
  559. @change="colorChange(key,value.color,value.textcolor)"
  560. >
  561. </div>
  562.  
  563. <div class="textcolor_box">
  564. <input type="color"
  565. :colorKey="key"
  566. v-model="value.textcolor"
  567. @change="colorChange(key,value.color,value.textcolor)"
  568. >
  569. </div>
  570. <div class="del" @click.stop="del_key(key)">删除</div>
  571. </div>
  572. </div>
  573.  
  574. <!-- 编辑视图 -->
  575. <div class="eidt_box" v-show="edit[key]">
  576. <div class="eidt_left">
  577. <!-- 修改作用域 -->
  578. <textarea :limit_key="key" :value="value.limit.toString().replace(/,/g,' ')"></textarea>
  579. <!-- 修改类目信息 -->
  580. <textarea :info_key="key" :value="value.info"></textarea>
  581. <!-- 修改关键字 -->
  582. <textarea :words_key="key" :value="value.words.toString().replace(/,/g,' ')"></textarea>
  583. </div>
  584.  
  585. <!-- 分割线 -->
  586. <div class="line"></div>
  587.  
  588. <!-- 确定 取消 -->
  589. <div class="eidt_right">
  590. <div class="del" @click="editOff(key)">取消</div>
  591. <div class="del" @click="ruleUpdate(key)">确定</div>
  592. </div>
  593.  
  594. </div>
  595.  
  596. </div>
  597.  
  598. <!-- 添加新规则 -->
  599. <div class="add" @click="add_key">+</div>
  600.  
  601. </div>
  602. `
  603. // 模板css
  604. static setingStyle = `
  605. body {
  606. --mian_width: 480px;
  607. --mian_color: #189fd8;
  608. --radius: 5px;
  609. --info_color: #eaeaea;
  610. --font_color: #676767;
  611. }
  612. .seting_box {
  613. width: 500px;
  614. max-height: 800px;
  615. overflow: auto;
  616. background: white;
  617. border-radius: 5px;
  618. position: fixed;
  619. transform: translate(-50%, 0);
  620. top: 50px;
  621. left: 50%;
  622. border: 1px solid rgba(0, 0, 0, 0.1);
  623. padding: 15px 5px;
  624. flex-direction: column;
  625. align-items: center;
  626. z-index: 10000;
  627. display: flex;
  628. box-shadow: 0 1px 5px 5px rgba(0, 0, 0, 0.1);
  629. }
  630. .option_box {
  631. width: var(--mian_width);
  632. display: flex;
  633. justify-content: space-between;
  634. }
  635. .option_box div {
  636. display: flex;
  637. height: 20px;
  638. align-items: center;
  639. padding: 5px 10px;
  640. background: var(--mian_color);
  641. color: white;
  642. border-radius: var(--radius);
  643. cursor: pointer;
  644. }
  645. .rule_list_box {
  646. width: var(--mian_width);
  647. border-radius: var(--radius);
  648. margin-top: 10px;
  649. padding: 5px 0px;
  650. box-shadow: 0 0 5px 0px #e2e2e2;
  651. cursor: pointer;
  652. }
  653. .rule_list_box .show_box {
  654. display: flex;
  655. justify-content: space-between;
  656. }
  657. .rule_list_box .show_box .show_left {
  658. width: 410px;
  659. }
  660. .rule_list_box .show_box .show_left > div {
  661. margin-top: 5px;
  662. }
  663. .rule_list_box .show_box .show_left > div:nth-child(1) {
  664. margin-top: 0px;
  665. }
  666. .rule_list_box .show_box .show_left .info_box {
  667. margin-left: 5px;
  668. margin-right: 5px;
  669. padding: 2px 5px;
  670. min-height: 22px;
  671. color: white;
  672. border-radius: var(--radius);
  673. background-color: var(--mian_color);
  674. display: flex;
  675. align-items: center;
  676. }
  677. .rule_list_box .show_box .show_left .words_box {
  678. margin-top: 0px;
  679. /* border: 1px solid black; */
  680. min-height: 20px;
  681. display: flex;
  682. flex-wrap: wrap;
  683. }
  684. .rule_list_box .show_box .show_left .words_box span {
  685. background-color: var(--info_color);
  686. color: white;
  687. padding: 2px 5px;
  688. border-radius: var(--radius);
  689. margin-left: 5px;
  690. margin-top: 5px;
  691. display: flex;
  692. align-items: center;
  693. height: 20px;
  694. }
  695. .rule_list_box .show_box .rule_set_box {
  696. display: flex;
  697. flex-direction: column;
  698. justify-content: space-around;
  699. padding: 0px 5px;
  700. }
  701. .rule_list_box .show_box .rule_set_box .color_box .textcolor_box {
  702. overflow: hidden;
  703. display: flex;
  704. justify-content: center;
  705. align-items: center;
  706. }
  707. .rule_list_box .show_box .rule_set_box .color_box .textcolor_box input {
  708. width: 50px;
  709. height: 25px;
  710. border-radius: var(--radius) !important;
  711. padding: 0px;
  712. }
  713. .rule_list_box .eidt_box {
  714. padding: 0px 5px;
  715. display: flex;
  716. flex-direction: row;
  717. justify-content: space-between;
  718. }
  719. .rule_list_box .eidt_box .eidt_left {
  720. width: 400px;
  721. }
  722. .rule_list_box .eidt_box .eidt_left textarea {
  723. width: 100% !important;
  724. min-height: 30px !important;
  725. border: none;
  726. outline: none;
  727. color: var(--font_color);
  728. background-color: var(--info_color);
  729. border-radius: var(--radius);
  730. margin-top: 5px;
  731. padding: 5px;
  732. }
  733. .rule_list_box .eidt_box .eidt_left textarea:nth-child(1) {
  734. margin-top: 0px;
  735. }
  736. .rule_list_box .eidt_box .eidt_right {
  737. display: flex;
  738. flex-direction: column;
  739. justify-content: space-around;
  740. }
  741. .rule_list_box .line {
  742. width: 1px;
  743. background-color: rgba(0, 0, 0, 0.1);
  744. }
  745. .rule_list_box .del {
  746. background-color: var(--mian_color);
  747. color: white;
  748. border-radius: var(--radius);
  749. padding: 0px 10px;
  750. font-size: 15px;
  751. display: flex;
  752. justify-content: center;
  753. align-items: center;
  754. cursor: pointer;
  755. }
  756. .add {
  757. width: var(--mian_width);
  758. height: 30px;
  759. background: #189fd8;
  760. color: white;
  761. display: flex;
  762. justify-content: center;
  763. border-radius: 5px;
  764. padding: 5px 0px;
  765. margin-top: 10px;
  766. align-items: center;
  767. font-size: 35px;
  768. font-weight: 100;
  769. cursor: pointer;
  770. }
  771. .bt {
  772. display: flex;
  773. align-items: center;
  774. justify-content: space-around;
  775. }
  776. input {
  777. border: none;
  778. padding: 0px;
  779. border-radius: 5px;
  780. box-shadow: none;
  781. }
  782. .config_file {
  783. display: none;
  784. }
  785. @media (max-width: 768px) {
  786.  
  787. .option_box {
  788. width: 95%;
  789.  
  790. }
  791. .option_box div {
  792. padding: 5px;
  793. font-size: 14px; /* 修改按钮字体大小 */
  794. }
  795.  
  796. .rule_list_box {
  797. width: 95%;
  798. }
  799. .rule_list_box .show_box .show_left {
  800. width: 70%;
  801. }
  802. .rule_list_box .eidt_box .eidt_left {
  803. width: 70%;
  804. }
  805. .rule_list_box .option_box div {
  806. padding: 3px; /* 修改按钮内边距 */
  807. font-size: 12px; /* 修改按钮字体大小 */
  808.  
  809. }
  810. .seting_box {
  811. width: 90%; /* 容器宽度为视口宽度的90% */
  812. max-height: 80vh; /* 最大高度为视口高度的80% */
  813. top: 10%; /* 顶部距离为视口高度的10% */
  814. bottom: 10%; /* 底部距离为视口高度的10% */
  815. transform: translate(-50%, 0); /* 居中显示 */
  816. left: 50%; /* 水平居中 */
  817. z-index: 10000; /* 设置一个较高的层叠顺序 */
  818. }
  819.  
  820. }
  821.  
  822. `
  823. // 开发用
  824. static devCss() {
  825. GM_xmlhttpRequest({
  826. method: 'get',
  827. url: 'http://127.0.0.1:1145',
  828. responseType: 'blob',
  829. onload: (res) => {
  830. // console.log(res.responseText);
  831. GM_addStyle(res.responseText)
  832. },
  833. onerror: (error => {
  834. console.log('该页无法链接')
  835. })
  836. })
  837. }
  838.  
  839. static create() {
  840. // 获取根节点
  841. let seting_box = document.querySelector('#mt_seting_box')
  842. seting_box.innerHTML = this.setingTemplate
  843.  
  844. // 创建根节点样式
  845. GM_addStyle(this.setingStyle)
  846. // this.devCss()
  847.  
  848. // 创建响应式ui
  849. const mt_Vue = new Vue({
  850. el: '#mt_seting_box',
  851. data() {
  852. return {
  853. rule: GM_getValue('key'),
  854. edit: this.addEdit(GM_getValue('key')),
  855. showSeting: false,
  856. config_add: false
  857. }
  858. },
  859.  
  860. watch: {
  861. showSeting(n) {
  862. // console.log(22333);
  863. }
  864. },
  865.  
  866. methods: {
  867. // 关闭设置
  868. close_seting() {
  869. this.showSeting = false
  870. },
  871.  
  872. // 开启设置
  873. open_seting() {
  874. this.showSeting = true
  875. console.log(2233)
  876. },
  877. // 添加属性开关
  878. addEdit(rules) {
  879. let a = {}
  880. Object.keys(rules).forEach(key => {
  881. a[key] = false
  882. })
  883. return a
  884. },
  885.  
  886. // 打开编辑
  887. editOn(key) {
  888. this.edit[key] = true
  889. },
  890.  
  891. // 关闭编辑
  892. editOff(key) {
  893. this.edit[key] = false
  894. },
  895.  
  896. // 颜色更新
  897. colorChange(key, color, textcolor) {
  898. document.querySelectorAll(`.mt_highlight[classesKey="${key}"]`).forEach(node => {
  899. node.style.background = color
  900. node.style.color = textcolor
  901. })
  902. // 保存到油猴中
  903. GM_setValue('key', this.rule)
  904. },
  905.  
  906. // 更新规则
  907. ruleUpdate(key) {
  908. let newInfo = document.querySelector(`textarea[info_key=${key}]`).value
  909. let newWords = (document.querySelector(`textarea[words_key=${key}]`).value.split(' '))
  910. let newLimit = (document.querySelector(`textarea[limit_key=${key}]`).value.split(' '))
  911.  
  912. // 去除空格
  913. newWords = Array.from(new Set(newWords))
  914. .filter(word => { return word != ' ' & word.length > 0 })
  915. newLimit = Array.from(new Set(newLimit))
  916. .filter(word => { return word != ' ' & word.length > 0 })
  917. // console.log(newInfo,newWords);
  918. this.rule[key].info = newInfo
  919. this.rule[key].words = newWords
  920. this.rule[key].limit = newLimit
  921.  
  922. this.editOff(key)
  923.  
  924. // 保存到油猴中
  925. GM_setValue('key', this.rule)
  926. },
  927.  
  928. // 添加新规则
  929. add_key() {
  930. let key = 'key_' + Math.floor(Math.random() * 10000000000)
  931. this.$set(this.rule, key, {
  932. info: '',
  933. words: [],
  934. color: '#dc6c75',
  935. textcolor: '#3467eb',
  936. limit: []
  937. })
  938.  
  939. this.$set(this.edit, key, false)
  940.  
  941. // 保存到油猴中
  942. GM_setValue('key', this.rule)
  943. console.log(2233)
  944. },
  945.  
  946. // 删除规则
  947. del_key(key) {
  948. let ready = confirm('确认删除,该操作不可恢复')
  949.  
  950. if (ready && Object.keys(this.rule).length > 1) {
  951. this.$delete(this.rule, key)
  952. this.$delete(this.edit, key)
  953. } else if (ready && Object.keys(this.rule).length < 2) {
  954. alert('至少保留一个')
  955. }
  956.  
  957. // 保存到油猴中
  958. GM_setValue('key', this.rule)
  959. },
  960.  
  961. // 复制到粘贴板
  962. copy() {
  963. navigator.clipboard.writeText(JSON.stringify(this.rules))
  964. },
  965.  
  966. // 获取配置覆盖
  967. config_in() {
  968. document.querySelector('.config_file').click()
  969. this.config_add = false
  970. },
  971. // 获取配置添加
  972. config_in_add() {
  973. document.querySelector('.config_file').click()
  974. this.config_add = true
  975. },
  976.  
  977. // 解析配置
  978. importFileJSON(ev) {
  979. return new Promise((resolve, reject) => {
  980. const fileDom = ev.target,
  981. file = fileDom.files[0]
  982.  
  983. // 格式判断
  984. if (file.type !== 'application/json') {
  985. reject('仅允许上传json文件')
  986. }
  987. // 检验是否支持FileRender
  988. if (typeof FileReader === 'undefined') {
  989. reject('当前浏览器不支持FileReader')
  990. }
  991.  
  992. // 执行后清空input的值,防止下次选择同一个文件不会触发onchange事件
  993. ev.target.value = ''
  994.  
  995. // 执行读取json数据操作
  996. const reader = new FileReader()
  997. reader.readAsText(file) // 读取的结果还有其他读取方式,我认为text最为方便
  998.  
  999. reader.onerror = (err) => {
  1000. reject('json文件解析失败', err)
  1001. }
  1002.  
  1003. reader.onload = () => {
  1004. const resultData = reader.result
  1005. if (resultData) {
  1006. try {
  1007. const importData = JSON.parse(resultData)
  1008. resolve(importData)
  1009. } catch (error) {
  1010. reject('读取数据解析失败', error)
  1011. }
  1012. } else {
  1013. reject('读取数据解析失败', error)
  1014. }
  1015. }
  1016. })
  1017. },
  1018.  
  1019. // 保存配置到本地
  1020. file_read(e) {
  1021. this.importFileJSON(e).then(res => {
  1022. // 合并还是覆盖
  1023. if (this.config_add) {
  1024. let cache = {}
  1025. Object.keys(GM_getValue('key')).forEach(key => {
  1026. cache['key_' + Math.floor(Math.random() * 10000000000)] = GM_getValue('key')[key]
  1027. })
  1028. cache = { ...cache, ...res }
  1029. console.log(cache)
  1030.  
  1031. GM_setValue('key', cache)
  1032. } else {
  1033. GM_setValue('key', res)
  1034. }
  1035. initialize()
  1036. this.rule = GM_getValue('key')
  1037. this.edit = this.addEdit(res)
  1038. })
  1039. },
  1040.  
  1041. // 导出配置
  1042. config_out() {
  1043. function exportJson(name, data) {
  1044. let blob = new Blob([data]) // 创建 blob 对象
  1045. let link = document.createElement('a')
  1046. link.href = URL.createObjectURL(blob) // 创建一个 URL 对象并传给 a 的 href
  1047. link.download = name // 设置下载的默认文件名
  1048. link.click()
  1049. }
  1050.  
  1051. exportJson('mt_hight_light_config.json', JSON.stringify(this.rule))
  1052.  
  1053. },
  1054.  
  1055. // 刷新
  1056. refresh() {
  1057. location.reload()
  1058. }
  1059.  
  1060. },
  1061.  
  1062. mounted() {
  1063. GM_registerMenuCommand('打开设置', this.open_seting)
  1064. // 点击其他区域关闭设置
  1065. document.body.addEventListener('click', (e) => {
  1066. // 检查是否是移动设备
  1067. if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
  1068. if (!document.querySelector('#mt_seting_box').contains(e.target)) {
  1069. this.close_seting()
  1070. }
  1071. }
  1072. })
  1073.  
  1074. }
  1075. })
  1076.  
  1077. }
  1078. }
  1079.  
  1080. ///////////////////////////////////////////////////////////
  1081. // vue根节点
  1082. let seting_box = document.createElement('div') // 创建一个节点
  1083. seting_box.setAttribute('id', 'mt_seting_box') // 设置一个属性
  1084. document.body.appendChild(seting_box)
  1085.  
  1086. GM_addStyle(HIGHTLIGHT.highlightStyle)
  1087.  
  1088. // 初始化数据
  1089. initialize()
  1090. console.log(GM_getValue('key'))
  1091.  
  1092. // 静态页面的检测
  1093. let nodeMap = textMap(document.body)
  1094. // console.log(nodeMap);
  1095. HIGHTLIGHT.highlight(nodeMap)
  1096. nodeMap.clear()
  1097.  
  1098. // 减少节点的重复检测
  1099. let doOnce = ((wait) => {
  1100. let timer = null
  1101. // 存储动态更新的节点
  1102. let elMap = new Map
  1103.  
  1104. return (el) => {
  1105. // 添加节点
  1106. elMap.set(el)
  1107. if (!timer) {
  1108. timer = setTimeout(() => {
  1109. // console.log(elMap);
  1110. elMap.forEach((value, el) => {
  1111. setTimeout(() => {
  1112.  
  1113. let nodeMap = textMap(el)
  1114. HIGHTLIGHT.highlight(nodeMap)
  1115. nodeMap = null
  1116.  
  1117. }, 1)
  1118. })
  1119. elMap.clear()
  1120. timer = null
  1121. }, wait)
  1122. }
  1123. }
  1124. })(100)
  1125. // 动态更新内容的检测
  1126. watch()
  1127.  
  1128. // 创建ui
  1129. GUI.create()
  1130. }
  1131. )()