1(function($) { 2 $(document).ready(function() { 3 // Intercepter les clics sur tous les liens obfusqués 4 $(document).on('click', 'a.obfuscate, a.obfuscate', function(e) { 5 e.preventDefault(); 6 e.stopPropagation(); 7 8 var $link = $(this); 9 var encodedUrl = $link.data('obf'); 10 11 if (!encodedUrl) { 12 console.error('URL obfusquée non trouvée'); 13 return false; 14 } 15 16 try { 17 // Décoder l'URL 18 var decodedUrl = atob(encodedUrl); 19 20 // Récupérer l'attribut target s'il existe 21 var target = $link.data('obf-target') || $link.attr('target') || '_self'; 22 23 // Naviguer vers l'URL en respectant l'attribut target 24 if (target === '_blank') { 25 // Ouvrir dans un nouvel onglet 26 var newTab = window.open(decodedUrl, '_blank'); 27 if (!newTab) { 28 console.warn('Le blocage des popups pourrait empêcher l\'ouverture du lien'); 29 // Essayer une autre méthode si le popup est bloqué 30 window.location.href = decodedUrl; 31 } 32 } else { 33 // Naviguer dans la fenêtre actuelle 34 window.location.href = decodedUrl; 35 } 36 } catch (error) { 37 console.error('Erreur lors du décodage de l\'URL:', error); 38 } 39 40 return false; 41 }); 42 43 // Support pour le clic droit / ouvrir dans un nouvel onglet 44 // Cette partie est cruciale pour que cela fonctionne avec le clic droit 45 $('a.obfuscate, a.obfuscate').each(function() { 46 var $link = $(this); 47 var encodedUrl = $link.data('obf'); 48 49 if (!encodedUrl) { 50 return; 51 } 52 53 try { 54 // Stocker l'URL originale pour l'attribut href 55 var originalUrl = atob(encodedUrl); 56 57 // Ajouter un gestionnaire d'événements pour le clic droit 58 $link.on('contextmenu', function() { 59 // Temporairement remplacer href par l'URL réelle pour le menu contextuel 60 $(this).attr('href', originalUrl); 61 62 // Remettre l'URL obfusquée après un court délai 63 setTimeout(function() { 64 $link.attr('href', 'https://obfuscate-' + btoa(Math.random()) + '.html'); 65 }, 100); 66 }); 67 68 // Ajouter un gestionnaire pour le clic du milieu (molette) 69 $link.on('mouseup', function(e) { 70 if (e.which === 2) { // Clic du milieu 71 e.preventDefault(); 72 window.open(originalUrl, '_blank'); 73 return false; 74 } 75 }); 76 77 // Ajouter un gestionnaire pour mousedown (avant que le clic ne soit traité) 78 $link.on('mousedown', function(e) { 79 if (e.which === 2) { // Clic du milieu 80 e.preventDefault(); 81 // Temporairement remplacer href pour le clic du milieu 82 $(this).attr('href', originalUrl); 83 setTimeout(function() { 84 $link.attr('href', 'https://obfuscate-' + btoa(Math.random()) + '.html'); 85 }, 100); 86 return false; 87 } 88 }); 89 } catch (error) { 90 console.error('Erreur lors du traitement du lien :', error); 91 } 92 }); 93 }); 94})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.