去除思否网页中的外链跳转,并将其替换为真实地址
// ==UserScript==
// @name SegmentFault real links
// @name:zh-CN SegmentFault 思否真实链接
// @namespace https://github.com/wxh06
// @version 0.0.1
// @description 去除思否网页中的外链跳转,并将其替换为真实地址
// @author 汪心禾
// @license MIT
// @supportURL https://github.com/wxh06/segmentfault-real-links/issues
// @match https://segmentfault.com/*
// @icon https://static.segmentfault.com/main_site_next/df1f59ce/favicon.ico
// @grant GM.xmlHttpRequest
// @connect link.segmentfault.com
// ==/UserScript==
"use strict";
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
GM.xmlHttpRequest({
method: "GET",
url: entry.target.getAttribute("href"),
/** @param {GM.Response} response */
onload(response) {
let { responseXML } = response;
if (!responseXML) {
responseXML = new DOMParser().parseFromString(
response.responseText,
"text/html",
);
}
entry.target.setAttribute(
"href",
responseXML.querySelector("[data-url]").getAttribute("data-url"),
);
observer.unobserve(entry.target);
},
});
}
});
});
/** @param {Element} element */
function observeAllLinks(element) {
element
.querySelectorAll('[href^="https://link.segmentfault.com/?enc="]')
.forEach((e) => observer.observe(e));
}
observeAllLinks(document.body);
document.body.addEventListener("DOMNodeInserted", (event) => {
if (event.target && event.target.nodeType !== Node.TEXT_NODE) {
observeAllLinks(event.target);
}
});