URL 자동 디코딩

base64로 인코딩된 URL를 자동으로 디코딩하여 링크로 연결해줍니다. (구글, 네이버, 다음 지원)

  1. // ==UserScript==
  2. // @name URL 자동 디코딩
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1
  5. // @description base64로 인코딩된 URL를 자동으로 디코딩하여 링크로 연결해줍니다. (구글, 네이버, 다음 지원)
  6. // @author You
  7. // @match https://www.google.com/search*
  8. // @match https://search.naver.com/search*
  9. // @match https://search.daum.net/search*
  10. // @grant none
  11. // @noframes
  12. // @run-at document-end
  13. // ==/UserScript==
  14.  
  15. (function () {
  16. 'use strict';
  17.  
  18. if (window.hasRun) return;
  19. window.hasRun = true;
  20.  
  21. const searchParamMap = {
  22. 'google.com': 'q',
  23. 'naver.com': 'query',
  24. 'daum.net': 'q',
  25. };
  26.  
  27. function getSearchQuery() {
  28. try {
  29. const urlParams = new URLSearchParams(window.location.search);
  30. const hostname = window.location.hostname;
  31.  
  32. let paramKey = null;
  33. for (const [domain, param] of Object.entries(searchParamMap)) {
  34. if (hostname.includes(domain)) {
  35. paramKey = param;
  36. break;
  37. }
  38. }
  39.  
  40. if (!paramKey) return null;
  41.  
  42. let query = urlParams.get(paramKey);
  43. if (!query) return null;
  44.  
  45. return query;
  46. } catch (error) {
  47. console.log('Error in getSearchQuery:', error);
  48. return null;
  49. }
  50. }
  51.  
  52. function main() {
  53. const searchQuery = getSearchQuery();
  54. if (!searchQuery || searchQuery.startsWith('.')) return;
  55.  
  56. let normalizedQuery = searchQuery
  57. .replace(/-/g, '+')
  58. .replace(/_/g, '/')
  59. .replace(/[^A-Za-z0-9+/=]/g, '');
  60.  
  61. while (normalizedQuery.length % 4) {
  62. normalizedQuery += '=';
  63. }
  64.  
  65. try {
  66. const decoded = atob(normalizedQuery);
  67. if (!decoded) return;
  68.  
  69. try {
  70. const url = new URL(decoded);
  71. if (url.protocol === 'http:' || url.protocol === 'https:') {
  72. console.log('Redirecting to:', url.href);
  73. setTimeout(() => {
  74. window.location.href = url.href;
  75. }, 100);
  76. }
  77. } catch (e) {
  78. console.log('Invalid URL:', decoded);
  79. }
  80. } catch (error) {
  81. console.log('Base64 디코딩 실패:', error);
  82. }
  83. }
  84.  
  85. setTimeout(main, 500);
  86. })();