网页短链接

让你发给别人的链接更简洁

当前为 2017-08-05 提交的版本,查看 最新版本

// ==UserScript==
// @name         网页短链接
// @namespace    none
// @version      0.2
// @description  让你发给别人的链接更简洁
// @author       Kaxyubok
// @match        http://*/*
// @match        https://*/*
// @grant        GM_xmlhttpRequest
// @grant        GM_addStyle
// ==/UserScript==

GM_addStyle(".hide{display: none;}.sto{color: #000;z-index: 10000;}.sto ul,.sto li{margin: 0;padding: 0;list-style: none;}.short-url{position: fixed;top: 0;left: 0;width: 200px;box-shadow: rgba(0, 0, 0, 0.5) 2px 2px 3px;border: 1px solid rgb(204, 204, 204);background: rgba(255, 255, 255, 0.9);cursor: pointer;text-align: center;font-size: 14px;}.url-title{width: 100%;height: 20px;line-height: 20px;font-size: 12px;margin-bottom: 2px;}.url-item{width: 100%;height: 24px;line-height: 24px;transition: all 0.2s linear;}.url-item:hover{background-color: #eee;}.sto input{opacity: 0;position: fixed;left: 50%;top: 50%;transform: translate(-50%,-50%);}.tip{position: fixed;left: 50%;top: 50%;transform: translate(-50%,-50%);width: 200px;height: 60px;line-height:60px;border-radius: 6px;text-align: center;}.tip.succ{background-color: #88ffc8;}.tip.erro{background-color: red;}");


const statusSucc = 1;
const statusErr = 0;
let doc = document,
    el = doc.createElement('div'),
    content = '<div class="short-url hide">' +
        '<div class="url-title">选择短链接</div>' +
        '<ul>' +
        '<li class="url-item baidu" data-to="baidu">百度</li>' +
        '<li class="url-item" data-to="sina">新浪</li>' +
        '<li class="url-item" data-to="suoim">suo.im</li>' +
        '</ul>' +
        '</div>' +
        '<input type="text" value="">' +
        '<div class="tip hide"></div>';
el.classList = 'sto';
el.innerHTML = content;
doc.body.appendChild(el);
let urlBar = doc.querySelector('.short-url'),
    shortUrl = doc.querySelector('.sto input'),
    tip = doc.querySelector('.tip');

let href = window.location.href,
    baidu = 'http://dwz.mn/create.aspx?url=',
    sina = 'https://api.t.sina.com.cn/short_url/shorten.json?source=1681459862&url_long=',
    suoim = 'http://suo.im/api.php?format=json&url=';

function addClass(obj, cls) {
    obj.classList.add(cls);
}

function removeClass(obj, cls) {
    obj.classList.remove(cls);
}

function position(ev) {
    let clientWidth = doc.documentElement.clientWidth,
        clientHeight = doc.documentElement.clientHeight,
        x = ev.clientX,
        y = ev.clientY;
    if ((x + urlBar.offsetWidth) > clientWidth) {
        x -= urlBar.offsetWidth;
    }
    if ((y + urlBar.offsetHeight) > clientHeight) {
        y -= urlBar.offsetHeight;
    }
    urlBar.style.left = x + 'px';
    urlBar.style.top = y + 'px';
}

function dataFilter(type, data) {
    let res = {};
    switch (type) {
        case 'baidu':
            if (data.status === 0) {
                res.status = statusSucc;
                res.url = data.tinyurl;
                res.message = '复制成功';
            } else {
                res.status = statusErr;
                res.url = '';
                res.message = data.err_msg;
            }
            break;
        case 'sina':
            if (data.error_code === '400') {
                res.status = statusErr;
                res.url = '';
                res.message = crossUrldata.error;
            } else {
                res.status = statusSucc;
                res.url = data[0].url_short;
                res.message = '复制成功';
            }
            break;
        case 'suoim':
            if (data.url === '') {
                res.status = statusErr;
                res.url = '';
                res.message = data.err;
            } else {
                res.status = statusSucc;
                res.url = data.url;
                res.message = '复制成功';
            }
            break;
    }
    return res;
}

let copyUrl = function (copy) {
    copy.focus();
    copy.setSelectionRange(0, copy.value.length);
    try {
        if (document.execCommand('copy')) {
            addClass(tip, 'succ');
        } else {
            addClass(tip, 'erro');
        }
        removeClass(tip, 'hide');
    } catch (e) {
        alert(e);
    }
};

let dataGet = function (param, type) {
    let website;
    switch (type) {
        case 'baidu':
            website = baidu;
            break;
        case 'sina':
            website = sina;
            break;
        case 'suoim':
            website = suoim;
            break;
    }
    GM_xmlhttpRequest({
        method: 'GET',
        synchronous: true,
        url: website + param,
        onload: function (res) {
            res = JSON.parse(res.response);
            let data = dataFilter(type, res);
            if (data.status === 1) {
                shortUrl.value = data.url;
                // copyUrl(shortUrl);
            }
            tip.innerText = data.message;
        }
    });
};

document.oncontextmenu = function (e) {
    if (e.ctrlKey) {
        removeClass(urlBar, 'hide');
        position(e);
        return false;
    }
};

urlBar.querySelector('ul').addEventListener('click', function (e) {
    let el = e.target;
    let type = el.getAttribute('data-to');
    dataGet(href, type);
    setTimeout(() => {
        copyUrl(shortUrl);
    }, 1000);
    addClass(urlBar, 'hide');
    setTimeout(() => {
        addClass(tip, 'hide');
    }, 3000);
});

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址