您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Replaces comss.ru links to comss.one for those who try to access comss.ru website from outside of Russian Federation
// ==UserScript== // @name InoReader replace comss.ru domain with comss.one // @namespace http://tampermonkey.net/ // @version 0.0.1 // @description Replaces comss.ru links to comss.one for those who try to access comss.ru website from outside of Russian Federation // @author Kenya-West // @match https://*.inoreader.com/feed* // @match https://*.inoreader.com/article* // @match https://*.inoreader.com/folder* // @match https://*.inoreader.com/starred* // @match https://*.inoreader.com/library* // @match https://*.inoreader.com/channel* // @match https://*.inoreader.com/teams* // @match https://*.inoreader.com/dashboard* // @match https://*.inoreader.com/pocket* // @icon https://inoreader.com/favicon.ico?v=8 // @license MIT // ==/UserScript== // @ts-check (function () { "use strict"; const appConfig = { corsProxy: "https://corsproxy.io/?", }; const appState = { readerPaneExists: false, }; // Select the node that will be observed for mutations const targetNode = document.body; // Options for the observer (which mutations to observe) const mutationObserverGlobalConfig = { attributes: false, childList: true, subtree: true, }; const querySelectorPathArticleRoot = ".article_full_contents .article_content"; /** * Callback function to execute when mutations are observed * @param {MutationRecord[]} mutationsList - List of mutations observed * @param {MutationObserver} observer - The MutationObserver instance */ const callback = function (mutationsList, observer) { for (let mutation of mutationsList) { if (mutation.type === "childList") { mutation.addedNodes.forEach(function (node) { if (node.nodeType === Node.ELEMENT_NODE) { replaceLinksInArticleList(node); replaceLinksInArticleView(node); } }); } } }; // // // FIRST PART - RESTORE IMAGES IN ARTICLE LIST // // // /** * * @param {Node} node * @returns {void} */ function replaceLinksInArticleList(node) { const readerPane = document.body.querySelector("#reader_pane"); if (readerPane) { if (!appState.readerPaneExists) { appState.readerPaneExists = true; /** * Callback function to execute when mutations are observed * @param {MutationRecord[]} mutationsList - List of mutations observed * @param {MutationObserver} observer - The MutationObserver instance */ const callback = function (mutationsList, observer) { for (let mutation of mutationsList) { if (mutation.type === "childList") { mutation.addedNodes.forEach(function (node) { if (node.nodeType === Node.ELEMENT_NODE) { if (appState.readerPaneExists) { setTimeout(() => { start(node); }, 500); } } }); } } }; // Options for the observer (which mutations to observe) const mutationObserverLocalConfig = { attributes: false, childList: true, subtree: false, }; // Create an observer instance linked to the callback function const tmObserverArticleList = new MutationObserver(callback); // Start observing the target node for configured mutations tmObserverArticleList.observe( readerPane, mutationObserverLocalConfig ); } } else { appState.readerPaneExists = false; } /** * * @param {Node} node */ function start(node) { readerPane ?.querySelectorAll("[href*='comss.ru']") .forEach((link) => { if (!link) { return; } const href = link.getAttribute("href"); const newHref = href?.replace("comss.ru", "comss.one"); if (!newHref) { return; } link.setAttribute("href", newHref); }); } } // // // SECOND PART - RESTORE IMAGES IN ARTICLE VIEW // // // /** * * @param {Node} node * @returns {void} */ function replaceLinksInArticleView(node) { /** * @type {HTMLDivElement | null} */ const article = document.body.querySelector(".article_full_contents"); if (article) { setTimeout(() => { start(article); }, 500); } /** * * @param {HTMLDivElement} article */ function start(article) { article ?.querySelectorAll("a[href*='comss.ru']") .forEach((link) => { if (!link) { return; } const href = link.getAttribute("href"); const newHref = href?.replace("comss.ru", "comss.one"); if (!newHref) { return; } link.setAttribute("href", newHref); }); } } // Create an observer instance linked to the callback function const tmObserverImageRestore = new MutationObserver(callback); // Start observing the target node for configured mutations tmObserverImageRestore.observe(targetNode, mutationObserverGlobalConfig); })();