DLE links decoder

Прямые ссылки на сайтах с движком DataLife Engine (DLE)

2016-08-18 기준 버전입니다. 최신 버전을 확인하세요.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         DLE links decoder
// @namespace    lainscripts_dle_links_decoder
// @version      0.1
// @description  Прямые ссылки на сайтах с движком DataLife Engine (DLE)
// @author       lainverse
// @match        *://*/*
// @grant        none
// ==/UserScript==
// Script based on a similar script by raletag:
// https://greasyfork.org/en/scripts/22290-%D0%9F%D1%80%D1%8F%D0%BC%D1%8B%D0%B5-%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B8-%D0%B2-dle/code

(function() {
    'use strict';

    var win = window;

    function isBase64(str) {
        try {
            return win.btoa(win.atob(str)) == str;
        } catch (err) {
            return false;
        }
    }

    function clickHandler(e){
        var link = e.target, url = link.href, url64;
        if (!url) {
            return true;
        }
        url64 = decodeURIComponent((url.match(/[?&]url=([^&]*)(&|$)/i)||[])[1]);
        if (!url64) {
            return true;
        }
        if (isBase64(url64)) {
            url = win.atob(url64);
            console.log('Replaced ' + link.href + ' with ' + url);
            e.target.href = url;
        }
        return true;
    }

    document.addEventListener('click', clickHandler, false);
    document.addEventListener('contextmenu', clickHandler, false);
})();