您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
This script adds two buttons in the page "Inbox" of FinecoBank.com that allow to mark all messages as read and to delete all messages.
当前为
// ==UserScript== // @name Fineco Inbox: Mark all messages as read and Delete all messages // @name:it Fineco Inbox: Segna tutti i messaggi come letti e Cancella tutti i messaggi // @description This script adds two buttons in the page "Inbox" of FinecoBank.com that allow to mark all messages as read and to delete all messages. // @description:it Questo script aggiunge due bottoni nella pagina "Inbox" di FinecoBank.com che consentono di segnare tutti i messaggi come letti e di cancellare tutti i messaggi. // @match https://finecobank.com/pvt/myfineco/mailbox* // @require https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js // @grant none //// @run-at document-start // @version 1.0.2 // @author Cyrano68 // @license MIT // @namespace https://gf.qytechs.cn/users/788550 // ==/UserScript== (function() { "use strict"; function console_log(text) { //let now = new Date().toISOString(); let now = new Date().toLocaleString(); console.log(`${now} ${text}`); } console_log("==> FinecoInbox_DeleteAll: HELLO! Loading script..."); document.addEventListener("DOMContentLoaded", onDOMContentLoaded); window.addEventListener("load", onWindowLoaded); function onDOMContentLoaded() { console_log(`==> FinecoInbox_DeleteAll: onDOMContentLoaded - document.readyState=${document.readyState}`); let myCSS = document.createElement("style"); myCSS.type = "text/css"; myCSS.innerHTML = ` .button-3 { appearance: none; background-color: #2ea44f; border: 1px solid rgba(27, 31, 35, .15); border-radius: 6px; box-shadow: rgba(27, 31, 35, .1) 0 1px 0; box-sizing: border-box; color: #fff; cursor: pointer; display: inline-block; font-family: -apple-system,system-ui,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"; font-size: 14px; font-weight: 600; line-height: 20px; padding: 6px 16px; position: relative; text-align: center; text-decoration: none; user-select: none; -webkit-user-select: none; touch-action: manipulation; vertical-align: middle; white-space: nowrap; } .button-3:focus:not(:focus-visible):not(.focus-visible) { box-shadow: none; outline: none; } .button-3:hover { background-color: #2c974b; } .button-3:focus { box-shadow: rgba(46, 164, 79, .4) 0 0 0 3px; outline: none; } .button-3:disabled { background-color: #94d3a2; border-color: rgba(27, 31, 35, .1); color: rgba(255, 255, 255, .8); cursor: default; } .button-3:active { background-color: #298e46; box-shadow: rgba(20, 70, 32, .2) 0 1px 0 inset; } `; document.body.appendChild(myCSS); } function onWindowLoaded() { console_log(`==> FinecoInbox_DeleteAll: onWindowLoaded - document.readyState=${document.readyState}`); addMyButtons(); } function addMyButtons() { console_log("==> FinecoInbox_DeleteAll: addMyButtons"); let interval_ms = 250; let timerId = setInterval(() => { if ($("div#inbox-client-app").length > 0) { console_log("==> FinecoInbox_DeleteAll: addMyButtons - data READY"); clearInterval(timerId); // Create a new button that will allow to mark all messages as read. let myButton1 = $("<button/>", {id: "myButton1", text: "MARK ALL AS READ", click: markAllAsRead, style: "margin-right: 5px", class: "button-3"}); // The button is placed before the list of messages. $("div#inbox-client-app").before(myButton1); // Create a new button that will allow to delete all messages. let myButton2 = $("<button/>", {id: "myButton2", text: "DELETE ALL", click: deleteAll, style: "margin-left: 5px", class: "button-3"}); // The button is placed before the list of messages. $("div#inbox-client-app").before(myButton2); console_log(`==> FinecoInbox_DeleteAll: addMyButtons - DONE`); } else { console_log("==> FinecoInbox_DeleteAll: addMyButtons - data NOT READY... wait"); } }, interval_ms); } async function markAllAsRead() { console_log(`==> FinecoInbox_DeleteAll: markAllAsRead`); let counter = 0; while (true) { let divReadMessages = $("div#inbox-client-app div.messageRow.read.row"); console_log(`==> FinecoInbox_DeleteAll: markAllAsRead - counter=${counter} - divReadMessages.length=${divReadMessages.length}`); let divUnreadMessages = $("div#inbox-client-app div.messageRow.messageunread.row"); console_log(`==> FinecoInbox_DeleteAll: markAllAsRead - counter=${counter} - divUnreadMessages.length=${divUnreadMessages.length}`); if (divUnreadMessages.length == 0) { break; } let divUnreadMessage = divUnreadMessages[0]; console_log(`==> FinecoInbox_DeleteAll: markAllAsRead - counter=${counter} - divUnreadMessage.outerHTML=${divUnreadMessage.outerHTML}`); let divButton = $(divUnreadMessage).find("div[role=\"button\"]"); console_log(`==> FinecoInbox_DeleteAll: markAllAsRead - counter=${counter} - divButton.length=${divButton.length}`); if (divButton.length > 0) { console_log(`==> FinecoInbox_DeleteAll: markAllAsRead - counter=${counter} - divButton[0].outerHTML='${divButton[0].outerHTML}'`); await openCloseMessagePage(divButton); await messageListReady(); } counter++; } } async function openCloseMessagePage(divButton) { console_log(`==> FinecoInbox_DeleteAll: openCloseMessagePage`); divButton.click(); // Open the message-page. let promise = new Promise((resolve, reject) => { let interval_ms = 250; let timerId = setInterval(() => { let divMsgNavigator = $("div#msg-navigator"); console_log(`==> FinecoInbox_DeleteAll: openCloseMessagePage - divMsgNavigator.length=${divMsgNavigator.length}`); if (divMsgNavigator.length > 0) { let pathX = divMsgNavigator.find("path[data-name|='Icons / Close / Solid']"); console_log(`==> FinecoInbox_DeleteAll: openCloseMessagePage - pathX.length=${pathX.length}`); if (pathX.length > 0) { let buttonX = pathX.closest("button.btn.btn-secondary"); console_log(`==> FinecoInbox_DeleteAll: openCloseMessagePage - buttonX.length='${buttonX.length}'`); if (buttonX.length > 0) { clearInterval(timerId); console_log(`==> FinecoInbox_DeleteAll: openCloseMessagePage - buttonX[0].outerHTML='${buttonX[0].outerHTML}'`); buttonX.click(); // Close the message-page. console_log(`==> FinecoInbox_DeleteAll: openCloseMessagePage - RESOLVE`); resolve(); } } } }, interval_ms); }); return promise; } async function messageListReady() { console_log(`==> FinecoInbox_DeleteAll: messageListReady`); let promise = new Promise((resolve, reject) => { let interval_ms = 250; let timerId = setInterval(() => { let divReadMessages = $("div#inbox-client-app div.messageRow.read.row"); console_log(`==> FinecoInbox_DeleteAll: messageListReady - divReadMessages.length=${divReadMessages.length}`); let divUnreadMessages = $("div#inbox-client-app div.messageRow.messageunread.row"); console_log(`==> FinecoInbox_DeleteAll: messageListReady - divUnreadMessages.length=${divUnreadMessages.length}`); if ((divReadMessages.length + divUnreadMessages.length) > 0) { clearInterval(timerId); console_log(`==> FinecoInbox_DeleteAll: messageListReady - RESOLVE`); resolve(); } }, interval_ms); }); return promise; } async function deleteAll() { console_log(`==> FinecoInbox_DeleteAll: deleteAll`); let counter = 0; while (true) { let divReadMessages = $("div#inbox-client-app div.messageRow.read.row"); console_log(`==> FinecoInbox_DeleteAll: deleteAll - counter=${counter} - divReadMessages.length=${divReadMessages.length}`); let divUnreadMessages = $("div#inbox-client-app div.messageRow.messageunread.row"); console_log(`==> FinecoInbox_DeleteAll: deleteAll - counter=${counter} - divUnreadMessages.length=${divUnreadMessages.length}`); if ((divReadMessages.length == 0) && (divUnreadMessages.length == 0)) { break; } if (divReadMessages.length > 0) { let divReadMessage = divReadMessages[0]; console_log(`==> FinecoInbox_DeleteAll: deleteAll - counter=${counter} - divReadMessage.outerHTML=${divReadMessage.outerHTML}`); let divButton = $(divReadMessage).find("div[role=\"button\"]"); console_log(`==> FinecoInbox_DeleteAll: deleteAll - counter=${counter} - divButton.length=${divButton.length}`); if (divButton.length > 0) { console_log(`==> FinecoInbox_DeleteAll: deleteAll - counter=${counter} - divButton[0].outerHTML='${divButton[0].outerHTML}'`); await openDeleteMessagePage(divButton); if ((divReadMessages.length + divUnreadMessages.length) > 1) { await messageListReady(); } } counter++; } else if (divUnreadMessages.length > 0) { let divUnreadMessage = divUnreadMessages[0]; console_log(`==> FinecoInbox_DeleteAll: deleteAll - counter=${counter} - divUnreadMessage.outerHTML=${divUnreadMessage.outerHTML}`); let divButton = $(divUnreadMessage).find("div[role=\"button\"]"); console_log(`==> FinecoInbox_DeleteAll: deleteAll - counter=${counter} - divButton.length=${divButton.length}`); if (divButton.length > 0) { console_log(`==> FinecoInbox_DeleteAll: deleteAll - counter=${counter} - divButton[0].outerHTML='${divButton[0].outerHTML}'`); await openDeleteMessagePage(divButton); if ((divReadMessages.length + divUnreadMessages.length) > 1) { await messageListReady(); } } counter++; } } } async function openDeleteMessagePage(divButton) { console_log(`==> FinecoInbox_DeleteAll: openDeleteMessagePage`); divButton.click(); // Open the message-page. let promise = new Promise((resolve, reject) => { let interval_ms = 250; let timerId = setInterval(() => { let divMsgNavigator = $("div#msg-navigator"); console_log(`==> FinecoInbox_DeleteAll: openDeleteMessagePage - divMsgNavigator.length=${divMsgNavigator.length}`); if (divMsgNavigator.length > 0) { let buttonTrash = $("button.btn-trash.btn.btn-secondary"); console_log(`==> FinecoInbox_DeleteAll: openDeleteMessagePage - buttonTrash.length='${buttonTrash.length}'`); if (buttonTrash.length > 0) { clearInterval(timerId); console_log(`==> FinecoInbox_DeleteAll: openDeleteMessagePage - buttonTrash[0].outerHTML='${buttonTrash[0].outerHTML}'`); buttonTrash.click(); // Delete the message-page. console_log(`==> FinecoInbox_DeleteAll: openDeleteMessagePage - RESOLVE`); resolve(); } } }, interval_ms); }); return promise; } console_log("==> FinecoInbox_DeleteAll: Script loaded"); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址