您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Manage page titles per (sub)domain. Shift-T-M for options.
当前为
// ==UserScript== // @name Title Manager // @namespace grom // @description Manage page titles per (sub)domain. Shift-T-M for options. // @include http* // @grant GM_getValue // @grant GM_setValue // @grant GM_deleteValue // @version 1.0.20140312 // @run-at document-end // ==/UserScript== if ( GM_getValue === 'undefined' || GM_setValue === 'undefined' ) { alert('=== Title Manager ===\n\nUnable to load or store values.\ \nPlease use supported script managers:\nGreasemonkey, Tampermonkey...'); } var domains = GM_getValue('domains', '').replace(/\./g, '\\.'); var match = window.location.host.toLowerCase().match(domains); if (match) { var _find = GM_getValue(match[0] + '-find', ''); if (_find.match(/^regex:/)) { var _find = _find.replace(/^regex:/, ''); var _find = new RegExp(_find, 'i'); } var _replaceWith = GM_getValue(match[0] + '-with', ''); } var t = document.querySelector('title'); var tOriginal = t.innerHTML; if (t && _find) { t.innerHTML = t.innerHTML.replace(_find,_replaceWith); } // separators var sep1 = '========'; var sep2 = '--------'; function tm_add() { var d = document, _domain = d.getElementById('tm-domain').value.toLowerCase(), _domainCheck = /^[a-z0-9_\.-]+$/; if (!_domain.match(_domainCheck)) { d.getElementById('tm-error-notifier').innerHTML = 'Domain invalid. Please use letters a-z, numbers 0-9, underscore _, minus - or dot .'; return false; } var _find = d.getElementById('tm-find').value; var _with = d.getElementById('tm-with').value; // store values if (_domain && _find) { var domains = GM_getValue('domains', ''); if (!domains) { GM_setValue('domains', _domain); } else { var match = _domain.replace(/\./g, '\\.'); var match = new RegExp('(^|\\|)' + match + '($|\\|)'); if (!domains.match(match)) { var domains = domains + '|' + _domain; GM_setValue('domains', domains); } } GM_setValue(_domain + '-find', _find); if (_with) { var _withRegex = d.getElementById('tm-with'); // if not adding as regex if (!_withRegex.getAttribute('regex')) { // crazy dollar sign escaping; var _with = _with.replace(/\$/g, '$$$$'); } GM_setValue(_domain + '-with', _with); _withRegex.removeAttribute('regex'); } } } function tm_addRegex() { var _find = document.getElementById('tm-find').value; if (!_find.match(/^regex:/)) { _find = _find.replace(/^/, 'regex:'); document.getElementById('tm-find').value = _find; } document.getElementById('tm-with').setAttribute('regex', 'true'); tm_add(); } function tm_manage() { var d = document; // d.documentElement.innerHTML is alternative to d.write(""); d.documentElement.innerHTML = ''; var domains = GM_getValue('domains', ''); if (domains) { var domains = domains.split('|'); for(var i = 0, j = domains.length; i < j; i++) { var _find = GM_getValue(domains[i] + '-find', ''); var _replaceWith = GM_getValue(domains[i] + '-with', ''); var box = d.createElement('div'); box.className = 'item'; box.innerHTML = '<span class="doms">' + domains[i] + '</span><br /><span class="find">' + _find + '</span>\ <br /><span class="with">' + _replaceWith + '</span><br /><button>Remove</button><br /><span>' + sep1 + '</span>'; if (d.body) d.body.appendChild(box); else d.documentElement.appendChild(box); box.getElementsByTagName('button')[0].addEventListener('click', tm_removeItem); } } var impList = d.createElement('textarea'); impList.id = 'tm-import-list'; d.documentElement.appendChild(impList); var imp = d.createElement('input'); imp.type = 'submit'; imp.id = 'tm-import'; imp.value = 'Import'; d.documentElement.appendChild(imp); imp.addEventListener('click', tm_import); } function tm_removeItem() { var item = this.parentNode; var _domain = item.getElementsByClassName('doms')[0].innerHTML; GM_deleteValue(_domain + '-find'); GM_deleteValue(_domain + '-with'); var domains = GM_getValue('domains', ''); var match = _domain.replace(/\./g,"\\."); var match = new RegExp('(^|\\|)' + match + '($|\\|)'); // match: (^ or |) + single/current domain + ($ or |) var domains = domains.replace(match, '$1').replace(/(\|)\||\|$/g, '$1'); // replace: matched single domain with ^ or |; replace: || with | or remove |$ GM_setValue('domains', domains); item.parentNode.removeChild(item); } function tm_import() { var d = document, list = d.getElementById('tm-import-list').value; var list = list.match(/.+/g).join(sep2).replace(/(--------)+========$/, '').split(sep1+sep2); if (!d.getElementById('tm-add')) tm_QuickMenu(); for(var i = 0, j = list.length; i < j; i++) { var listB = list[i].split(sep2); d.getElementById('tm-domain').value = listB[0]; d.getElementById('tm-find').value = listB[1]; if (listB[2]) { d.getElementById('tm-with').value = listB[2]; d.getElementById('tm-with').setAttribute('regex', 'true'); } if (listB[0] && listB[1]) tm_add(); } tm_manage(); } function tm_QuickMenu() { var d = document, box = d.createElement('div'); box.style = 'text-align:center!important;'; box.innerHTML = '<br /><hr><h1>Title Manager</h1><p>Full title: "<strong>' + tOriginal + '</strong>"</p>\ <p id="tm-error-notifier">Regex supported only in "Search for"; use single backslash <strong>\\</strong> for escaping characters.</p>\ <p>Domain: <input type="text" id="tm-domain" value="' + window.location.host.toLowerCase() + '" /></p>\ <p>Search for: <input type="text" id="tm-find" value="' + tOriginal + '" /></p>\ <p>Replace with: <input type="text" id="tm-with" value="" /></p>\ <p><input type="submit" id="tm-add" value="Add" /> or <input type="submit" id="tm-add-regex" value="Add as regex" /></p>\ <p><input type="submit" id="tm-manage" value="View and manage all title rules" /></p><br /><br />'; if (d.body) d.body.appendChild(box); else d.documentElement.appendChild(box); box.scrollIntoView(); d.getElementById('tm-add').addEventListener('click', tm_add); d.getElementById('tm-add-regex').addEventListener('click', tm_addRegex); d.getElementById('tm-manage').addEventListener('click', tm_manage); } // trigger for QuickMenu: Shift+T+M var kbd = []; onkeydown = onkeyup = function(e) { kbd[e.keyCode] = e.type == 'keydown'; if (kbd[16] && kbd[84] && kbd[77]) { tm_QuickMenu(); kbd = []; return false; } }
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址