Greasy Fork

Greasy Fork is available in English.

Reomve ZhiHu Link Redirect

去除知乎链接的重定向

当前为 2020-03-03 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Reomve ZhiHu Link Redirect
// @version      0.1
// @description  去除知乎链接的重定向
// @author       roshanca
// @match        http://*.zhihu.com/*
// @match        https://*.zhihu.com/*
// @grant        none
// @namespace http://greasyfork.icu/users/20921
// ==/UserScript==

(function() {
    'use strict';

    var DOMObserverTimer = null;
    var DOMObserverConfig = {
        attributes: true,
        childList: true,
        subtree: true
    };
    var DOMObserver = new MutationObserver(function () {
        if (DOMObserverTimer) {
            clearTimeout(DOMObserverTimer);
        }
        DOMObserverTimer = setTimeout(function () {
            DOMObserver.disconnect();
            handleLinks();
            DOMObserver.observe(document.body, DOMObserverConfig);
        }, 100);
    });
    DOMObserver.observe(document.body, DOMObserverConfig);

    // first run
    handleLinks();

    // cache
    var processedLinks = new WeakMap();

    var handleLinks = function () {
        var allLink = document.querySelectorAll('a.external, a.LinkCard');

        if (!allLink.length) return;

        for (var i = 0, len = allLink.length; i < len; i++) {
            var link = allLink[i];
            if (processedLinks.has(link)) {
                continue;
            } else {
                processedLinks.set(link, 1);
                replaceLink(link);
            }
        }
    };

    var replaceLink = function(link) {
        var href = link.href;
        var regRet = href.match(/target=(.+?)(&|$)/);
        var newHref = href;

        if (regRet && regRet.length === 3) {
            newHref = regRet[1];
        }

        link.href = newHref;
    };
})();