- // ==UserScript==
- // @name Baidu Google Bing URL Shorten
- // @name:zh-CN 百度谷歌必应链接缩短
- // @namespace https://www.runningcheese.com
- // @version 0.4
- // @description Mark Baidu、Google、Bing URL Shortest.
- // @description:zh-CN 将 Baidu、Google、Bing 搜索引擎的冗长链接缩短,变干净。
- // @author RunningCheese
- // @match *://*.google.com/*
- // @match *://*.baidu.com/*
- // @match *://*.bing.com/*
- // @icon https://t1.gstatic.cn/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url=https://www.google.com
- // @grant none
- // @license MIT
- // ==/UserScript==
-
- // main function
- (function() {
- 'use strict';
- sturl();
- window.addEventListener('locationchange', function (){
- sturl();
- })
- })();
-
-
-
-
-
- // shorten url
- function sturl() {
- // url
- var url = window.location.href;
- // new url
- var nurl = window.location.href;
- // query string need to be removed
- var qs = [
- //Baidu
- 'rsp','prefixsug','fr','bsst','f','inputT','usm','rsv_page','rqlang','rsv_t','oq','rsv_pq','rsv_spt', 'ie', 'rsv_enter','rsv_sug1', 'rsv_sug7','rsv_sug2','rsv_sug3','rsv_iqid', 'rsv_bp', 'rsv_btype', 'rsv_idx', 'rsv_dl', 'issp', 'cshid', 'tn','rsv_sug4',
- //Google
- 'tbas','ved', 'uact', 'ei', 'ie', 'oq', 'sclient', 'cshid', 'dpr','iflsig', 'aqs', 'gs_lcp', 'source', 'sourceid', 'sxsrf', 'pccc', 'sa', 'biw', 'bih', 'hl', 'newwindow',
- //Bing
- 'tsc','sp','FORM','form','pq','sc','qs','sk','cvid','lq','ghsh','ghacc','ghpl','ghc'
-
- ];
- // query string need to be removed if equal to something
- var qseq = [['start', '0']];
-
- // remove not necessary query string
- nurl = rmqs(nurl, qs);
- // remove not necessary query string if equal to something
- nurl = rmqseq(nurl, qseq);
-
- // do nothing if new url is the same as url
- if (url == nurl){
- return false;
- }
-
- // update url in address bar to new url
- window.history.replaceState(null, null, nurl);
-
- // update url in address bar to new url(deprecated)
- //window.location.replace(nurl)
- }
-
- // remove not necessary query string
- function rmqs(url, qs) {
- url = new URL(url);
- qs.forEach(function(i){
- url.searchParams.delete(i);
- });
- return url.toString();
- }
-
- // remove not necessary query string if equal to something
- function rmqseq(url, qseq) {
- url = new URL(url);
- qseq.forEach(function(i){
- if (url.searchParams.get(i[0]) == i[1]){
- url.searchParams.delete(i[0]);
- }
- });
- return url.toString();
- }
-
- /*----force listen to locationchange work start----*/
- history.pushState = ( f => function pushState(){
- var ret = f.apply(this, arguments);
- window.dispatchEvent(new Event('pushstate'));
- window.dispatchEvent(new Event('locationchange'));
- return ret;
- })(history.pushState);
-
- history.replaceState = ( f => function replaceState(){
- var ret = f.apply(this, arguments);
- window.dispatchEvent(new Event('replacestate'));
- window.dispatchEvent(new Event('locationchange'));
- return ret;
- })(history.replaceState);
-
- window.addEventListener('popstate',()=>{
- window.dispatchEvent(new Event('locationchange'))
- });
- /*----force listen to locationchange work end----*/
-
-
-