您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Highlights more interesting notifications for YOU.
当前为
- // ==UserScript==
- // @name Facebook YOUR Notifications Highlighter
- // @namespace http://www.JamesKoss.com/
- // @version 1.2
- // @description Highlights more interesting notifications for YOU.
- // @author James Koss
- // @match https://www.facebook.com/*
- // ==/UserScript==
- (function() {
- 'use strict';
- var first = true;
- var timed = false;
- var opened = false;
- var scrolled = false;
- // Update notifications on scrolling.
- // Not too often. Arbitrary delay.
- function onScrollNots() {
- if (scrolled === false) {
- scrolled = true;
- updateNotifications();
- // Delay until next check from scroll. Arbitrary delay.
- setTimeout(function() { scrolled = false; }, 3000);
- }
- }
- // After clicking the notification, remove highlight color and eventListener.
- function removeHighlight(e) {
- e.currentTarget.removeEventListener("click", removeHighlight, false);
- e.currentTarget.style.backgroundColor = "";
- e.currentTarget.paramA.style.backgroundColor = "";
- }
- // Update relevant notifications with highlight.
- function updateNotifications() {
- // Delay before element updates, so they load first. Arbitrary delay!
- if (timed === false) {
- setTimeout(function(){ timed = true; updateNotifications(); }, 1000);
- return;
- }
- // Ignore this call, if just clicked to close notifications view.
- if (opened === true && scrolled === false) {
- opened = false;
- return;
- }
- opened = true;
- // On first viewing, add updating when scrolling the notifications.
- if (first === true) {
- first = false;
- var scrolledArea = document.querySelector('div[class="uiScrollableAreaWrap scrollable"]');
- scrolledArea.addEventListener("scroll", onScrollNots);
- }
- var notificationsHolder = document.querySelector('div[class="_33p"]');
- // Only check new notifications.
- var notificationsNew = notificationsHolder.querySelectorAll('li[class="_33c jewelItemNew"]');
- for (var i = 0; i < notificationsNew.length; i++) {
- var current = notificationsNew[i];
- var notificationParent = current.querySelector('div[class="_4l_v"]');
- var notificationYour = notificationParent.querySelectorAll('span');
- // match 1 for interest highlight, 2 for "Like" highlight.
- var match = false;
- for (var j=0; j < notificationYour.length; j++) {
- var cur = notificationYour[j];
- var t = cur.textContent;
- // Relevant text inside notification element.
- if (t.indexOf("replied to your") !== -1 ||
- t.indexOf("commented on your") !== -1 ||
- t.indexOf("shared your") !== -1 ||
- t.indexOf("mentioned you") !== -1 ||
- t.indexOf("tagged you") !== -1 ||
- t.indexOf("made you") !== -1 ||
- t.indexOf("also replied") !== -1 ||
- (t.indexOf("replied to") !== -1 && t.indexOf("on your") !== -1)) {
- match = 1;
- break;
- } else if (t.indexOf("likes your") !== -1 ||
- t.indexOf("like your") !== -1) {
- match = 2;
- break;
- }
- }
- // No match.
- if (match === false) {
- continue;
- }
- // Select color by match value.
- var color = "#d0dff6";
- switch(match) {
- case 1:
- color = "#d0dff6";
- break;
- case 2:
- color = "#faedf8";
- break;
- }
- // Update the li & a elements backgrounds.
- var a = current.querySelector('a[class="_33e _1_0e"]');
- a.style.backgroundColor = color;
- current.style.backgroundColor = color;
- current.paramA = a; // Pass to object, for highlight removal after clicked.
- current.addEventListener("click", removeHighlight, false);
- }
- timed = false;
- }
- // Right-Clicking the notifications button on FB.
- function onclickJewel(e) {
- if (e.which === 1) {
- updateNotifications();
- }
- }
- // Listen to a click on the notifications button on FB.
- var fbNotificationsJewel = document.getElementById("fbNotificationsJewel");
- fbNotificationsJewel.addEventListener("click", onclickJewel);
- })();