mail.ru: clean links

Dereferences mail.ru links in emails when clicked. Skips advertisement block displayed when some links are clicked.

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name        mail.ru: clean links
// @namespace   lainscripts_mailru_clean_links
// @description Dereferences mail.ru links in emails when clicked. Skips advertisement block displayed when some links are clicked. 
// @author      lainverse
// @license     CC BY-SA
// @version     5.1
// @include     https://e.mail.ru/*
// @grant       none
// ==/UserScript==

var clb = /^https?:\/\/r\.mail\.ru\/cl[a-z][0-9]+\/(.*)/i,
    cgi = /&(amp;)?url=([^&]*)/i,
    letter = document.getElementById('b-letter');

function locate_confirmer(i) {
    if (!i) return;
    var confirmForm = document.querySelector('#MailRuConfirm');
    if (!confirmForm)
        setTimeout(locate_confirmer, 100, i-1);
}


letter.addEventListener('click',function(e){
    if (e.target.tagName.toUpperCase() !== 'A')
        return;
    var link = e.target;
    for (var x in link)
        if (x.indexOf('__originUrl') > -1) {
            // stop propagation of this click event
            e.preventDefault();
            // start searching for a confirmer
            locate_confirmer(11);

            var res = null;

            do {
                res = cgi.exec(link[x]);
                if (res) link[x] = decodeURIComponent(res[2]);
                res = clb.exec(link[x]);
                if (res) link[x] = 'http://' + res[1];
            } while (res);

            link.href = link[x];
            console.log("Dereferenced link:", link[x]);
            window.open(link[x], '_blank').focus();
            delete link[x];

            break;
        }
});