您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Display a count of updated threads (and notifications) in the GOG favicon (and page title) and reload hourly so a browser tab can be used as an update notifier
当前为
- // ==UserScript==
- // @name GOG.com - Updated Thread Count in Title
- // @namespace ssokolow.com
- // @version 8
- // @description Display a count of updated threads (and notifications) in the GOG favicon (and page title) and reload hourly so a browser tab can be used as an update notifier
- // @contributionURL http://tinyurl.com/kfgayrh
- //
- // @match *://www.gog.com/forum
- //
- // @require https://cdnjs.cloudflare.com/ajax/libs/tinycon/0.6.3/tinycon.min.js
- // @require https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js
- //
- // @compatible firefox Developed and dogfooded on Firefox
- // @incompatible chrome This script itself works but Tinycon.js fails to set the favicon for unknown reasons
- //
- // @grant GM_getValue
- // @grant GM_setValue
- // @grant GM_registerMenuCommand
- // ==/UserScript==
- // Set up hourly reload before anything that unexpected markup could break
- setTimeout(function() { window.location.reload(true); },
- GM_getValue('check_interval', 3600 * 1000));
- // Initialize with values indicating a soft error
- var bubble_bg = '#FF8000';
- var unviewed_count = '!';
- var notification_counts = null;
- var needs_persist = false;
- var old_counts = JSON.parse(GM_getValue('notification_counts', '{}'));
- /// Save a set of counts as 'stuck' so they'll get ignored next time
- var mark_stuck_values = function(counts) {
- GM_setValue('notification_counts', JSON.stringify(counts));
- }
- /// Mark a value in old_counts to be cleared
- var reset_stuck_value = function(idx) {
- old_counts[idx] = 0;
- needs_persist = true;
- }
- /// Retrieve GOG notification counts with "mark as read" support
- var get_notification_counts = function() {
- // Parse the counts and omit the total to avoid double-counting
- var counts = [], total = 0;
- $(".top-nav__item-count").slice(1).each(function() {
- counts.push(Number(this.textContent));
- });
- // Implement "Mark as Read" to work around GOG's delayed dismissal
- for (var i = 0, len = counts.length; i < len; i++) {
- if (old_counts && old_counts[i] && counts[i] >= old_counts[i]) {
- // If the number went up, keep suppressing stuff marked as stuck
- total += counts[i] - old_counts[i];
- } else {
- total += counts[i];
- reset_stuck_value(i);
- }
- }
- // Only call GM_setValue once for performance reasons
- if (needs_persist) {
- mark_stuck_values(old_counts);
- needs_persist = false;
- }
- // Make accessible to the "mark as read" callback
- notification_counts = counts;
- return total;
- };
- /// Retrieve unviewed count for favourite forum topics
- var get_unviewed_count = function() {
- var category = $(".topics .text:contains('My favourite topics')");
- if (category.length) { // If not some kind of "server overloaded" page...
- category = category.parents('h2').next('.category');
- // Use an empty list of favourite topics to detect being logged out
- if (category.find('.item:not(.message)').length) {
- bubble_bg = '#9CC824';
- unviewed_count = category.find('.item:not(.visited) .name a').length;
- } else {
- bubble_bg = '#ff0000';
- unviewed_count = 'X';
- }
- }
- }
- $(document).ready(function() {
- get_unviewed_count();
- if (unviewed_count !== 'X') {
- unviewed_count += get_notification_counts();
- }
- Tinycon.setOptions({
- width: 7,
- height: 9,
- font: '10px arial',
- colour: '#ffffff',
- background: bubble_bg,
- fallback: false
- });
- Tinycon.setBubble(unviewed_count);
- $('title').text('[' + unviewed_count + '] ' + $('title').text());
- GM_registerMenuCommand("Ignore Stuck Notification Count", function() {
- mark_stuck_values(notification_counts);
- }, 'I');
- });
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址