Greasy Fork is available in English.

链接地址洗白白

把链接地址缩减至最短可用状态,并复制到剪切板,以方便分享。【在每个页面的底部中间,有一个小小的按钮,用来呼出面板】

Verze ze dne 28. 08. 2020. Zobrazit nejnovější verzi.

// ==UserScript==
// @name 链接地址洗白白
// @namespace Daomouse Link Cleaner
// @version 0.1.7
// @author 稻米鼠
// @description 把链接地址缩减至最短可用状态,并复制到剪切板,以方便分享。【在每个页面的底部中间,有一个小小的按钮,用来呼出面板】
// @icon https://i.v2ex.co/vpQpSrfgl.png
// @homepage https://script.izyx.xyz/clean-the-link/
// @updateURL
// @downloadURL
// @supportURL https://meta.appinn.com/t/7363
// @match *://*/*
// @grant GM_setClipboard
// @grant GM_notification
// @grant GM_addStyle
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_registerMenuCommand
// @noframes
// ==/UserScript==

/**
 * 声明:本页面代码未作任何压缩处理
 * 但不意味着作者允许任何形式的——
 * 借用、抄袭、修改……
 * 未经作者允许,仅有权使用,及分享
 * 且分享必须在鲜明位置给出本脚本在
 * Greasemonkey 中的发布地址
 * 作者未授权任何其他网站提供下载!
 * 开源不等于任君自取,自重!!!
 */

/** 主功能函数 **/

/**
 * 链接净化规则
 * version 0.0.3
 * update 2020-08-27 12:10:04
 * 规则说明:
 * 
 */
const rules = {
  'www.bilibili.com': {/* Blibili */
    testReg: /^http(?:s)?:\/\/www\.bilibili\.com\/video\/(av\d+).*$/i,
    replace: 'https://www.bilibili.com/$1',
    query: ['p'],
    hash: true
  },
  'itunes.apple.com': {/* Apple Stroe */
    testReg: /^http(?:s)?:\/\/itunes\.apple\.com\/(?:\w{2}\/)?([^\/]+)\/(?:[^\/]+\/)?((?:id)\d+).*$/i,
    replace: 'https://itunes.apple.com/cn/$1/$2',
  },
  'apps.apple.com': {/* Apple Stroe */
    testReg: /^http(?:s)?:\/\/apps\.apple\.com\/(?:\w{2}\/)?([^\/]+)\/(?:[^\/]+\/)?((?:id)\d+).*$/i,
    replace: 'https://apps.apple.com/cn/$1/$2',
  },
  'microsoft.com/win10-store': {/* Win10 apps store */
    testReg: /^http(?:s)?:\/\/www\.microsoft\.com\/[a-zA-Z-]{2,5}\/p\/[\w-]+\/([a-z0-9]{12,})(?:[^a-z0-9].*|$)/i,
    replace: 'https://www.microsoft.com/store/apps/$1',
  },
  'chrome.google.com/webstore': {/* Chrome Store */
    testReg: /^http(?:s)?:\/\/chrome\.google\.com\/webstore\/detail\/[^\/]+\/([a-z]{32}).*/i,
    replace: 'https://chrome.google.com/webstore/detail/$1',
  },
  's.taobao.com': {/* Taobao Search */
    testReg: /^http(?:s)?:\/\/s\.taobao\.com\/search.*$/i,
    replace: 'https://s.taobao.com/search',
    query: ['q'],
  },
  'list.tmall.com': {/* Tmall Search */
    testReg: /^http(?:s)?:\/\/list\.tmall\.com\/search_product\.htm.*$/i,
    replace: 'https://list.tmall.com/search_product.htm',
    query: ['q'],
  },
  'item.taobao.com': {/* Taobao item */
    testReg: /^http(?:s)?:\/\/item\.taobao\.com\/item\.htm.*$/i,
    replace: 'https://item.taobao.com/item.htm',
    query: ['id'],
  },
  'detail.tmall.com': {/* Tmall item */
    testReg: /^http(?:s)?:\/\/detail\.tmall\.com\/item\.htm.*$/i,
    replace: 'https://detail.tmall.com/item.htm',
    query: ['id'],
  },
  'taobao/tmall.com/shop': {/* Taobao/Tmall Shop */
    testReg: /^http(?:s)?:\/\/(\w+)\.(taobao|tmall)\.com\/shop\/view_shop\.htm.*$/i,
    replace: 'https://$1.$2.com/',
  },
  'c.pc.qq.com': {/* Open Taobao share link from QQ */
    testReg: /^http(?:s)?:\/\/c\.pc\.qq\.com\/middle.html\?.*pfurl=([^&]*)(?:&.*$|$)/i,
    replace: '$1',
    query: [],
    methods: ['decodeUrl'],
  },
  'item.m.jd.com': {/* JD mobile to PC */
    testReg: /^http(?:s)?:\/\/item\.m\.jd\.com\/product\/(\d+)\.html(\?.*)?$/i,
    replace: 'https://item.jd.com/$1.html',
  },
  'item.m.jd.com/ware/': {/* JD mobile to PC */
    testReg: /^http(?:s)?:\/\/item\.m\.jd\.com\/ware\/view\.action\?.*wareId=(\d+).*$/i,
    replace: 'https://item.jd.com/$1.html',
  },
  'search.jd.com': {/* JD Search */
    testReg: /^http(?:s)?:\/\/search\.jd\.com\/Search\?.*$/i,
    query: ['keyword', 'enc'],
  },
  're.jd.com': {/* JD hot sell */
    testReg: /^http(?:s)?:\/\/re\.jd\.com\/cps\/item\/(\d+)\.html.*$/i,
    replace: 'https://item.jd.com/$1.html',
  },
  'weibo.com/u': {/* Weibo personal homepage to mobile */
    testReg: /^http(?:s)?:\/\/(?:www\.)?weibo\.com\/u\/(\d+)(\?.*)?$/i,
    replace: 'https://m.weibo.cn/$1',
  },
  'weibo.com': {/* Weibo article page to mobile */
    testReg: /^http(?:s)?:\/\/(?:www\.)?weibo\.com\/(?:\d+)\/(\w+)(\?.*)?$/i,
    replace: 'https://m.weibo.cn/status/$1',
  },
  'greasyfork.org/script/tabs': {/* Greasyfork Script 脚本下各种标签 */
    testReg: /^http(?:s)?:\/\/(?:www\.)?greasyfork\.org\/(?:[\w-]*\/)?scripts\/(\d+)-[^//]*\/(code|versions|stats|derivatives|admin).*$/i,
    replace: 'https://greasyfork.org/scripts/$1/$2',
    hash: true
  },
  'greasyfork.org': {/* Greasyfork Script 各类页面 */
    testReg: /^http(?:s)?:\/\/(?:www\.)?greasyfork\.org\/(?:[\w-]*\/)?(scripts|users)\/(\d+)-[^//]*$/i,
    replace: 'https://greasyfork.org/$1/$2',
  },
  'greasyfork.org/script/discussions': {/* Greasyfork Script 脚本下讨论 */
    testReg: /^http(?:s)?:\/\/(?:www\.)?greasyfork\.org\/(?:[\w-]*\/)?scripts\/(\d+)-[^//]*\/discussions\/(\d+).*$/i,
    replace: 'https://greasyfork.org/scripts/$1/discussions/$2',
    hash: true
  },
  'greasyfork.org/discussions': {/* Greasyfork Script 论坛 */
    testReg: /^http(?:s)?:\/\/(?:www\.)?greasyfork\.org\/(?:[\w-]*\/)?discussions\/(greasyfork|development|requests)\/(\d+)(?:[^\d].*)?$/i,
    replace: 'https://greasyfork.org/discussions/$1/$2',
    hash: true
  },
  'store.steampowered.com|steamcommunity.com': {/* Steam */
    testReg: /^http(?:s)?:\/\/(store\.steampowered|steamcommunity)\.com\/app\/(\d+).*$/i,
    replace: 'https://$1.com/app/$2',
  },
  'meta.appinn.com': {/* Appinn BBS */
    testReg: /^http(?:s)?:\/\/meta\.appinn\.net\/t(?:\/[^/]*)*?\/(\d+)(\/.*$|$)/i,
    replace: 'https://meta.appinn.net/t/$1',
  },
  'amazon.co.jp': {/* amazon.co.jp */
    testReg: /^http(?:s)?:\/\/(?:www\.)?amazon\.co\.jp\/([^\/]+)\/dp\/(\w+)\/.*$/i,
    replace: 'https://www.amazon.co.jp/$1/dp/$2',
  },
  'yangkeduo.com': {/* Pin Duo Duo product Page */
    testReg: /^http(?:s)?:\/\/mobile\.yangkeduo\.com\/goods.html\?.*$/i,
    query: ['goods_id'],
  },
  'other': {/* All url */
    testReg: /^(http(?:s)?:\/\/[^?#]*)[?#].*$/i,
    query: ['id', 'tid', 'uid', 'q', 'wd', 'query', 'keyword'],
  }
}
function dms_get_pure_url (url=window.location.href) {
  const hash = url.replace(/^[^#]*(#.*)?$/, '$1')
  const base = url.replace(/(\?|#).*$/, '')
  let pureUrl = url
  const getQueryString = function(key) {
    let ret = url.match(new RegExp('(?:\\?|&)(' + key + '=[^?#&]*)', 'i'))
    return ret === null ? '' : ret[1]
  }
  /* 链接处理方法 */
  const methods = {
    decodeUrl: function(url){return decodeURIComponent(url) }
  }
  for(let i in rules){
    let rule = rules[i]
    let reg = rule.testReg
    let replace = rule.replace
    if (reg.test(url)){
      let newQuerys = ''
      if(typeof(rule.query)!=='undefined' && rule.query.length>0){
        rule.query.map((query) => {
          const ret = getQueryString(query)
          if(ret !== ''){
            newQuerys += (newQuerys.length ? '&' : '?') + ret
          }
        })
      }
      newQuerys += typeof(rule.hash)!=='undefined' && rule.hash
                   ? hash
                   : ''
      pureUrl = (typeof(replace)==='undefined'?base:url.replace(reg, replace) ) + newQuerys
      if(typeof(rule.methods)!=='undefined' && rule.methods.length>0){
        rule.methods.map((methodName)=>{
          pureUrl = methods[methodName](pureUrl)
        })
      }
      break
    }
  }
  return pureUrl
}
/** 必须函数 */
/* 弹出通知 */
const dmsCLNotification = function (text) {
  GM_notification(text, 'Success! by 链接地址洗白白', 'data:image/png;base64,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');
};
/* 打开支持页面 */
const goToSupport = () => {
  window.open('https://meta.appinn.com/t/7363', '_blank');
};
/* 复制净化后的链接和标题 */
const getCleanUrlAndTitle = () => {
  const pureUrl = dms_get_pure_url();
  const ttileAndUrl = document.title + ' \n' + pureUrl;
  GM_setClipboard(ttileAndUrl);
  dmsCLNotification('链接地址已净化,并和网站标题一起复制到剪切板中~');
  if(window.location.href !== pureUrl) window.location.href = pureUrl;
};
/* 复制净化后的链接 */
const getCleanUrl = () => {
  const pureUrl = dms_get_pure_url();
  GM_setClipboard(pureUrl);
  dmsCLNotification('链接地址已净化并复制到剪切板中~');
  if(window.location.href !== pureUrl) window.location.href = pureUrl;
};
/* 直接复制页面链接和标题 */
const getUrlAndTitle = () => {
  const theUrl = document.title + ' \n' + window.location.href;
  GM_setClipboard(theUrl);
  dmsCLNotification('网站标题 & 链接地址已复制到剪切板中~');
  dmsLCToggleEl(panel);
};
/* 复制当前页面链接 */
const getUrlOnly = () => {
  const theUrl = window.location.href;
  GM_setClipboard(theUrl);
  dmsCLNotification('链接地址已复制到剪切板中~');
  dmsLCToggleEl(panel);
};
/* 清理整个页面 */
const cleanAllPage = () => {
  const aTagEles = document.getElementsByTagName('a');
  for (let i = 0; i < aTagEles.length; i++) {
    let theLink = aTagEles[i].href;
    if (theLink.match(/^(http:\/\/|https:\/\/|\/\/)/) !== null) {
      theLink = theLink.replace(/^\/\//, 'https://');
      aTagEles[i].href = dms_get_pure_url(theLink);
    }
  }
  panel.style.display = '';
  dmsCLNotification(
    '页面中所有链接已净化~\n可能导致部分链接无法使用,刷新后恢复。'
  );
  dmsLCToggleEl(panel);
};
/** 获取是否显示页面工具栏 **/
let isShowPageBar = GM_getValue('SHow_page_bar', true);

/* 注册菜单项 */
GM_registerMenuCommand('复制【净化】链接和标题', getCleanUrlAndTitle);
GM_registerMenuCommand('复制【净化】链接', getCleanUrl);
GM_registerMenuCommand('【净化】所有链接', cleanAllPage);
GM_registerMenuCommand('复制【当前】链接和标题', getUrlAndTitle);
GM_registerMenuCommand('复制【当前】链接', getUrlOnly);
GM_registerMenuCommand('显示/隐藏页面工具条', () => {
  GM_setValue('SHow_page_bar', !isShowPageBar);
  isShowPageBar = GM_getValue('SHow_page_bar', true);
  alert(
    '页面工具条已被设置为【' +
      (isShowPageBar ? '显示' : '隐藏') +
      '】,仅在此后新打开页面中生效。'
  );
});
GM_registerMenuCommand('支持 & 反馈', goToSupport);

if (isShowPageBar) {
  /** 添加样式 **/
  GM_addStyle(`
  #dms-link-cleaner {
  width: 100%;
  position: fixed;
  left: 0;
  bottom: 0;
  z-index: 99999999;
  pointer-events: none;
}
#dms-link-cleaner * {
  pointer-events: auto;
}
#dms-lc-button {
  position: relative;
  margin: 0 auto;
  width: 24px;
  height: 12px;
  color: rgba(0, 0, 0, .3);
  font-size: 12px;
  line-height: 10px;
  cursor: pointer;
  text-align: center;
  border: 1px solid #AAA;
  border-radius: 12px 12px 0 0;
  background-color: rgba(255, 255, 255, .3);
  box-shadow: 0 0 5px rgba(0, 0, 0, .1);
}
#dms-lc-button:hover {
  color: rgba(0, 0, 0, .8);
  background-color: rgba(255, 255, 255, 0.8);
}
#dms-lc-panel {
  display: none;
  border-top: 5px solid #65adff;
  background-color: #FFF;
  box-shadow: 0 0 5px rgba(0, 0, 0, .1);
}
#dms-lc-panel > #dms-lc-panel-content {
  display: flex;
  justify-content: center;
  align-items: center;
  flex: 1 1 none;
  flex-wrap: wrap;
  width: 100%;
  max-width: 800px;
  margin: 0 auto;
  padding: 16px 0;
  text-align: center;
  position: relative;
}
#dms-lc-panel > #dms-lc-panel-content > .dms-lc-button {
  position: relative;
  padding: 8px 16px;
  margin: 0 8px 0 0;
  font-size: 16px;
  line-height: 1.2em;
  font-weight: lighter;
  border: 1px solid #65adff;
  border-radius: 8px;
  cursor: pointer;
}
#dms-lc-panel > #dms-lc-panel-content > .dms-lc-button:hover {
  border: 1px solid #0062d1;
  background-color: #0062d1;
  color: #FFF;
  font-weight: normal;
}
#dms-lc-panel > #dms-lc-panel-content > .dms-lc-button:hover::before {
  content: attr(data-tip);
  background-color: rgba(0, 0, 0, .9);
  border-radius:3px;
  color: #fff;
  padding: 10px;
  position: absolute;
  width: calc(100% + 20px);
  left: 50%;
  bottom: calc(100% + 10px);
  margin-left: calc(-50% - 20px);
  white-space: pre;
}
#dms-lc-panel > #dms-lc-panel-content > .dms-lc-button:hover::after {
  content: "";
  position: absolute;
  width: 0;
  height: 0;
  left: calc(50% - 8px);
  top: -10px;
  border-top: 8px solid rgba(0, 0, 0, .8);
  border-right: 8px solid transparent;
  border-left: 8px solid transparent;
}
#dms-lc-panel > #dms-lc-panel-content > .dms-lc-hr {
  width: 100%;
  margin: 5px 0;
}
#dms-lc-panel > #dms-lc-panel-content > #dmsCLButtonCoffee {
  padding: 0;
  margin: 0;
}
#dms-lc-panel > #dms-lc-panel-content > #dmsCLButtonCoffee > svg {
  width: 35px;
  height: 35px;
}
#dms-lc-panel > #dms-lc-panel-content > #dms-lc-qrcode {
  display: none;
  width: 100%;

  position: absolute;
  left: 0;
  bottom: calc(100% + 24px);
  padding: 16px;
  color: #333;
  font-size: 18px;
  line-height: 1.2em;
  border: 1px solid #CCC;
  border-radius: 12px 12px 0 0;
  background-color: #FFF;
  box-shadow: 0 6px 36px 5px rgba(0, 0, 0, .16);
}
#dms-lc-panel > #dms-lc-panel-content > #dms-lc-qrcode > img {
  width: 30%;
  max-width: 180px;
}
  `);
  /** 添加界面 **/
  const dmsLCPopPanel = document.createElement('div');
  dmsLCPopPanel.id = 'dms-link-cleaner';
  dmsLCPopPanel.innerHTML = `<div id="dms-lc-button">
  ︽
</div>
<div id="dms-lc-panel">
  <div id="dms-lc-panel-content">
    <div class="dms-lc-button" id="dmsCLButtonTitle" data-tip="复制网页标题和净化后的链接">
      Copy pure link with title
    </div>
    <div class="dms-lc-button" id="dmsCLButtonPure" data-tip="复制净化后的链接">
      Copy pure link only
    </div>
    <div class="dms-lc-hr"></div>
    <div class="dms-lc-button" id="dmsCLButtonCopyTitle" data-tip="复制网页标题和当前网页链接">
      Copy current link with title
    </div>
    <div class="dms-lc-button" id="dmsCLButtonCopyLink" data-tip="复制当前网页链接">
      Copy current link only
    </div>
    <div class="dms-lc-hr"></div>
    <div class="dms-lc-button" id="dmsCLButtonCleanAll" data-tip="净化网页中所有链接">
      Clean all links in this page
    </div>
    <div class="dms-lc-button" id="dmsCLButtonLink" data-tip="联系作者">Issues</div>
    <div class="dms-lc-button" id="dmsCLButtonCoffee" data-tip="Coffee">
      <svg t="1539507279741" class="icon" style="" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1618" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M237.717333 320L277.333333 597.333333h469.333334l39.616-277.333333z" fill="#FFC107" p-id="1619"></path><path d="M832 320v-53.333333a32 32 0 0 0-32-32h-576A32 32 0 0 0 192 266.666667V320h640z" fill="#795548" p-id="1620"></path><path d="M280.384 618.666667L320 896h384l39.616-277.333333z" fill="#77574F" p-id="1621"></path><path d="M512 597.333333m-106.666667 0a106.666667 106.666667 0 1 0 213.333334 0 106.666667 106.666667 0 1 0-213.333334 0Z" fill="#77574F" p-id="1622"></path><path d="M426.666667 597.333333c0-15.616 4.501333-30.058667 11.84-42.666666h-167.253334l15.232 106.666666h169.621334A84.778667 84.778667 0 0 1 426.666667 597.333333zM585.493333 554.666667c7.338667 12.608 11.84 27.050667 11.84 42.666666a84.778667 84.778667 0 0 1-29.44 64h169.621334l15.232-106.666666h-167.253334zM768 128H256l-21.333333 106.666667h554.666666z" fill="#4E342E" p-id="1623"></path><path d="M512 448a149.333333 149.333333 0 1 1 0 298.666667 149.333333 149.333333 0 0 1 0-298.666667m0-21.333333c-94.101333 0-170.666667 76.565333-170.666667 170.666666s76.565333 170.666667 170.666667 170.666667 170.666667-76.565333 170.666667-170.666667-76.565333-170.666667-170.666667-170.666666z" fill="#5D4037" p-id="1624"></path><path d="M512 448a149.333333 149.333333 0 1 0 0 298.666667 149.333333 149.333333 0 0 0 0-298.666667z m0 234.666667a85.333333 85.333333 0 1 1 0-170.666667 85.333333 85.333333 0 0 1 0 170.666667z" fill="#FFF3E0" p-id="1625"></path></svg>
    </div>
    <div id="dms-lc-qrcode">
      Please Buy Me A Cup of Coffee.<br>
      链接地址洗白白,作者同学很可爱<br />
      扫码请杯热咖啡,规则更新更勤快
      <hr />
      <img src="images/AliPay-360.png" alt="Alipay">
      <img src="images/WePay-360.png" alt="Wechat">
      <img src="images/QQPay-360.png" alt="QQ">
    </div>
  </div>
</div>`;
  document.body.insertBefore(
    dmsLCPopPanel,
    document.body.lastChild.nextSibling
  );

  /** 事件响应函数 **/

  /* 定义元素 */
  const button = document.getElementById('dms-lc-button');
  const panel = document.getElementById('dms-lc-panel');

  const qrcode = document.getElementById('dms-lc-qrcode');

  const buttonTitle = document.getElementById('dmsCLButtonTitle');
  const buttonPure = document.getElementById('dmsCLButtonPure');

  const buttonCopyT = document.getElementById('dmsCLButtonCopyTitle');
  const buttonCopyL = document.getElementById('dmsCLButtonCopyLink');

  const buttonCleanLink = document.getElementById('dmsCLButtonCleanAll');

  const buttonLink = document.getElementById('dmsCLButtonLink');
  const buttonCoffee = document.getElementById('dmsCLButtonCoffee');

  /**
   * 面板切换
   */
  const dmsLCToggleEl = function (el) {
    const elStyle = getComputedStyle(el, '');
    if (elStyle.display === 'none') {
      el.style.display = 'block';
    } else {
      el.style.display = '';
    }
  };

  /** 添加监听器 **/
  /* 面板切换按钮 */
  button.addEventListener(
    'click',
    () => {
      dmsLCToggleEl(panel);
    },
    false
  );
  /* 二维码切换按钮 */
  buttonCoffee.addEventListener(
    'click',
    () => {
      dmsLCToggleEl(qrcode);
    },
    false
  );
  /* 支持链接 */
  buttonLink.addEventListener('click', goToSupport, false);
  /* 净化并复制标题和链接 */
  buttonTitle.addEventListener('click', getCleanUrlAndTitle, false);
  /* 净化并复制链接 */
  buttonPure.addEventListener('click', getCleanUrl, false);
  /* 复制当前链接和标题 */
  buttonCopyT.addEventListener('click', getUrlAndTitle, false);
  /* 复制当前链接 */
  buttonCopyL.addEventListener('click', getUrlOnly, false);
  /* 清理整个页面 */
  buttonCleanLink.addEventListener('click', cleanAllPage, false);
  /* 全屏隐藏按钮 */
  document.addEventListener('fullscreenchange', function (event) {
    if (document.fullscreenElement) {
      button.style.display = 'none';
    } else {
      button.style.display = '';
    }
  });
}