Feedly 优化

一些优化

当前为 2025-06-04 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         Feedly 优化
// @homepage     https://greasyfork.org/zh-CN/scripts/488038
// @namespace    https://feedly.com
// @version      2025.06.04
// @description  一些优化
// @author       Ejin
// @match        https://feedly.com/*
// @grant        none
// ==/UserScript==

// 2025.03.29 简化左侧菜单,优化历史代码。
// 2025.03.06 屏蔽某些关键词的内容。
// 2025.02.25 消灭新特性提醒窗口(What's new,并且为漂浮状态)
// 2024.08.10 优化左侧UI,将上方无用导航链接移至下方
// 2024.07.14 弱化存档分类的加粗,隐藏未读数。
// 2024.02.23 First-read,跳转到第一个已读项
(function () {
 'use strict';

 setInterval(() => {//1.route 持续重复运行

     // 1.1 First-read
     if (location.href.indexOf("feedly.com/i/subscription/feed") != -1) {
         if (document.querySelector(".count-followers") != null
             && document.querySelector(".count-followers").parentElement.parentElement.innerHTML.indexOf("First-read") == -1) {
             //开始匿名函数,一次性增加First-read链接并设置事件。
             (() => {
                 document.querySelector(".count-followers").parentElement.parentElement.innerHTML
                     += "<span class='detail'> <a href='javascript:;' id='First-read' style='color:#9e9e9e;'>First-read</a></span>";
                 document.getElementById("First-read").parentElement.setAttribute(
                     "class",document.querySelector('#First-read').parentElement.parentElement.children[0].className);// 修正class统一格式
                 //增加First-read链接后,为它赋予事件。
                 document.getElementById("First-read").addEventListener('click', () => {
                     //事件开始,隐藏First-read链接,设置工作标志。
                     document.getElementById("First-read").style.display = "none";
                     document.querySelector("article").setAttribute("auto_roll_page","1");//正在自动滚动标志,切换其他RSS会自动消失
                     //隐藏链接后,开始自动滚动页面,开启计时器函数
                     ((/*setInterval*/ setInterval_index)=>{setInterval_index=setInterval(()=>{
                         if(document.querySelector("article[auto_roll_page]") == null){
                             //标志消失则停止滚动操作并退出
                             clearInterval(setInterval_index);
                             return;
                         }
                         //操作页面
                         if (document.querySelectorAll(".EntryTitleLink").length > 0 || document.querySelectorAll(".entry--read").length > 0) {
                             if (!document.querySelector(".entry--read")) {
                                 //未发现已读的内容,继续滚动页面
                                 document.querySelectorAll(".EntryTitleLink")[document.querySelectorAll(".EntryTitleLink").length - 1].scrollIntoView();
                             } else {
                                 //发现已读内容,停止滚动。并将未读内容放在合适位置
                                 document.querySelector('#feedlyFrame').scrollBy(0, -1000);//向上滚动
                                 document.querySelector(".entry--read").scrollIntoView();//滚动到第一个已读内容
                                 document.querySelector('#feedlyFrame').scrollBy(0,
                                     200 - document.querySelector('#feedlyFrame').clientHeight
                                 );//再往回滚动一点,即能看到一部分未读内容
                                 document.querySelector("article[auto_roll_page]").removeAttribute("auto_roll_page");//清理
                                 clearInterval(setInterval_index);//清理
                             }
                         }//结束页面操作
                     },1000);})();//滚动计时器函数结束
                 });//事件定义结束
             })();//整体匿名函数结束
         }//判断是否需要增加First-read链接,并确认页面是否准备好
     } //end First-read

     // 1.2 待增加

 }, 500);//end 1.route

 // 2 重复运行
 // 2.1.点击、标记已读自动跳到returnALL后返回ALL页面
 setInterval(() => {
     if (document.querySelector("#header-title") && document.querySelector("#header-title").innerText == "returnALL") {
         //文件夹和RSS有区别,如果进的是RSS会有一个链接,所以用innerText获取是通用的
         document.querySelectorAll("span").forEach(ele => {
             if (ele.innerHTML == "All") {
                 ele.click();
             }
         });
     }
 }, 1500);// end 跳到returnALL后返回ALL页面

 // 2.2 清理列表、全文中标题的绿色广告
setInterval(() => {
     document.querySelectorAll('.InterestingMetadataWrapper--separator-right:not([blocked="1"]) , .EntryMetadataSeparator:not([blocked="1"])').forEach(ele=>{
         ele.setAttribute("style","height: 1px;width:1px; overflow: hidden;display:block;");
         ele.setAttribute("blocked","1"); //检查过要打标签避免重复检查
         //console.log(ele);
     })
 }, 1500);//end 清理列表、全文中标题的绿色广告
//清理右侧顶栏的升级按钮。
((setInterval_index,timecount=1)=>{setInterval_index=setInterval(()=>{
	if(document.querySelector("#topHeaderBarFX button")){
		if(document.querySelector("#topHeaderBarFX button").innerHTML.indexOf("Upgrade") != -1){
			document.querySelector("#topHeaderBarFX button").parentElement.setAttribute("style","height: 1px;width:1px; overflow: hidden;display:block;");
			clearInterval(setInterval_index);
		}
	}

	if(timecount==30){clearInterval(setInterval_index);}timecount++;
},2000);})(); //end 内容标题广告和顶部升级按钮

 // 2.3 屏蔽某些关键词的内容(多个关键词用+号连接)。
var ADKeywords=['[推广]','[VXNA]', '万 0.85 免 5', '万 0.85 免五', '万 0.5 免五', '靓号', 'XXL-', 'Pagespy', '龟男', '龟龟', '🐢'].map(item=>item.toLowerCase());
setInterval(() => {
    if(location.href.indexOf("v2ex") == -1){
        return;
    }

    document.querySelectorAll('article:not([scriptcheckkeyword="1"])').forEach(article => {
        article.setAttribute("scriptcheckkeyword","1"); //检查过要打标签避免重复检查
        var articleContent = article.textContent.toLowerCase();
        // 检查是否包含关键词
        var hasKeyword = ADKeywords.some(keyword => {
            if(keyword.includes("+")){
                return keyword.split("+").every(word=>articleContent.includes(word));
            } else {
                return articleContent.includes(keyword);
            }
        });
        // 如果包含关键词,则隐藏并添加属性
        if (hasKeyword) {
            article.setAttribute("style","height: 1px;width:1px; overflow: hidden;display:block;");
        }
    });
}, 3000);//屏蔽带有关键字的内容

 // 2.4 待增加

 // 3 不重复运行
 // 3.1 弱化存档分类,隐藏未读数。
 ((setInterval_index,timecount=1)=>{setInterval_index=setInterval(()=>{
     if (document.querySelector('button[aria-label^="Mark 存档"')) {
         if (document.querySelector('button[aria-label^="Mark 存档"').style.opacity == "") {
             // 寻找存档文件夹的最上层元素,目的是设置透明,鼠标移动过去时取消透明
             var parEle = document.querySelector('button[aria-label^="Mark 存档"]');
             while (1) {
                 parEle = parEle.parentElement;
                 if(parEle.innerHTML.indexOf(">存档<") != -1){
                     break;
                 }
             }

             //通过透明隐藏未读数
             parEle.onmouseover = () => {
                 document.querySelector('button[aria-label^="Mark 存档"').style.opacity = "1";
             };
             parEle.onmouseout = () => {
                 document.querySelector('button[aria-label^="Mark 存档"').style.opacity = "0.2";
             };
             parEle.onmouseout();

             // 顺便隐藏掉returnALL类别的未读数
             document.querySelector('button[aria-label^="Mark returnALL"').style.display = "none";

			clearInterval(setInterval_index);
         }
     }

	if(timecount==30){clearInterval(setInterval_index);}timecount++;
 },2000);})(); //end 弱化存档分类

 // 3.2 简化左侧 UI,无用导航菜单全部隐藏
 ((setInterval_index,timecount=1)=>{setInterval_index=setInterval(()=>{
     if(document.querySelector(".LeftnavSection")
         && document.querySelector(".LeftnavSection").parentElement.innerHTML.indexOf(">Integrations &amp; API<") != -1){
         setTimeout(() => {
             //判断最后一个菜单组已经加载,再演示一点时间,才开始隐藏不会报错。
             var menukeyword=[">Today<", ">Read Later<", ">Integrations &amp; API<"];
             document.querySelectorAll(".LeftnavSection").forEach(ele=>{
                 menukeyword.forEach(word=>{
                     if(ele.innerHTML.indexOf(word) != -1){
                         ele.setAttribute("style","display:none;");
                         ele.setAttribute("nemuhide","1");
                     }
                 });
             });
             //隐藏左侧上方的显示用户信息和子菜单
             document.querySelector(".LeftnavProfileItem").setAttribute("style","display:none;");
             document.querySelector(".LeftnavProfileItem").setAttribute("nemuhide","1");
             //增加显隐菜单组的操作功能,不知道为什么加上这个后界面会没反应,之后可以加在其他已有的元素上面
             document.querySelector(".LeftnavSection").parentElement.appendChild(document.createElement('div')).className='menu_showhide';
             document.querySelector(".menu_showhide").innerHTML="显示/隐藏菜单组";
             document.querySelector(".menu_showhide").addEventListener('click',()=>{
                 document.querySelectorAll("div[nemuhide]").forEach(ele=>{
                     ele.style.display=ele.style.display=="none"?"block":"none";
                 })
             });
         }, 500); //延迟执行结束

         clearInterval(setInterval_index);
     } //结束判断已准备好菜单

	if (timecount == 120) { clearInterval(setInterval_index); } timecount++;
 },300);})();//end 优化左侧 UI

 //3.3 消灭新特性提醒窗口(What's new,并且为漂浮状态)
 ((setInterval_index, timecount = 1) => {setInterval_index = setInterval(() => {
         if (document.querySelector(".AppDockedPopups")) {
             if (document.querySelector(".AppDockedPopups").innerHTML.indexOf("What's new") != -1) {
                 document.querySelector(".AppDockedPopups").querySelector("button").click();
             }
         }

         if (timecount == 200) { clearInterval(setInterval_index); } timecount++;
     }, 300);
 })(); //end

 // 3.4 待增加

})(); //end all