您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
support inoreader web to open the link.
当前为
// ==UserScript== // @name inoreader-open-link // @namespace https://screw-hand.com/ // @version 0.11 // @description support inoreader web to open the link. // @author screw-hand // @match https://www.inoreader.com/* // @icon https://www.inoreader.com/favicon.ico?v=8 // @grant none // @homepage https://github.com/screw-hand/tampermonkey-user.js // ==/UserScript== (function () { 'use strict'; /** * now only for Layout of List, Card, Magazine View * and only for https://www.inoreader.com/feed/ * other layout is comming soon ... * dashbord page is comming soon ... */ const scriptName = 'inoreader-open-link'; const openMode = '_blank'; /* eslint-disable no-multi-spaces */ const view_style_config = { 0:'List', // Supported 1:'Expanded', 2:'Column', 3:'Card', // Supported 4:'Magazine', // Supported } /* eslint-enable no-multi-spaces */ /** * TOOD * 1. mare list mode mark read * 2. Magazine view can't mark unread */ function isMode(modeStr) { const currentMode = view_style_config[window.view_style]; console.trace({ currentMode }); return currentMode === modeStr; } function makeReaded(e) { const article_subscribed = e.target.closest('.article_subscribed'); if (article_subscribed) { const a_mark_read = article_subscribed.querySelector('a[onclick^=mark_read]') const span_mark_read = a_mark_read && a_mark_read.querySelector('span[class$=mark_as_read_full]') span_mark_read && a_mark_read.onclick() } } function cardModeOpenLink (e) { const article_title_link = '.article_title_link'; const article_title_picture = '.article_tile_picture'; const is_target_article_title_link = e.target.classList.contains(article_title_link.substring(1)); const is_target_article_title_picture = e.target.classList.contains(article_title_picture.substring(1)); if (is_target_article_title_link || is_target_article_title_picture) { const article_title_content_wraper = '.article_tile_content_wraper'; const target_closest_wraper = e.target.closest(article_title_content_wraper); if (target_closest_wraper) { const href = e.target.href || e.target.parentElement.href; // TODO make the open in new tab is option that user could setting window.open(href, openMode) } makeReaded(e) } } function listModeOpenLink(e) { const article_header_text = '.article_header_text'; const target = e.target.closest(article_header_text); if (target) { const link = target.querySelector('a')?.href; link && window.open(link, openMode) } // TOOD write list mode mark read in here... } function magazineModeOpenLink(e) { const article_magazine_content_wraper = '.article_magazine_content_wraper'; const target = e.target.closest(article_magazine_content_wraper); if (target) { const link = target.querySelector('a')?.href; if (link) { e.preventDefault(); window.open(link, openMode); } makeReaded(e) } } const originalDialog = window.dialog; window.dialog = function () { console.log("dialog"); const flag = arguments[0] === "article_dialog"; console.log({ flag }); if (isMode('Card') && flag) { return cardModeOpenLink(event); } // else if (isMode('Magazine') && flag) { // return; magazineModeOpenLink(event); // } return originalDialog.apply(this, arguments); }; const original_toggle_articleview = window.toggle_articleview; window.toggle_articleview = function () { console.trace(event.target); event.stopPropagation(); event.preventDefault(); if (isMode('List')) { const [id, no_helpers, event, extra] = arguments; const flag = typeof id === 'string' && no_helpers === false && (event instanceof Event || event instanceof MouseEvent) && extra === false; console.log({ flag }); if (flag) { return listModeOpenLink(event); } } else if (isMode('Magazine')) { return magazineModeOpenLink(event); } const original_scroll_to_article = window.scroll_to_article; window.scroll_to_article = () => undefined; original_toggle_articleview.apply(this, arguments); setTimeout(() => { window.scroll_to_article = original_scroll_to_article }, 300); } })();