So that you can right click them, copy their links, open them in a new tab, etc.
// ==UserScript==
// @name Make profiles in Search Bar behave like real links
// @namespace https://github.com/nate-kean/
// @version 20251009-2
// @description So that you can right click them, copy their links, open them in a new tab, etc.
// @author Nate Kean
// @match https://jamesriver.fellowshiponego.com/*
// @icon https://www.google.com/s2/favicons?sz=64&domain=fellowshiponego.com
// @license MIT
// @grant none
// ==/UserScript==
(async function() {
document.head.insertAdjacentHTML("beforeend", `
<style id="nates-css-for-middle-clickable-search-entries">
ul.top-nav-autocomplete > li > a .autoCompleteNameHolder {
color: #176bfb !important;
}
ul.top-nav-autocomplete > li > a:hover .autoCompleteNameHolder {
color: #4685f2 !important;
}
</style>
`);
function delay(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
async function waitForElement(selector, pollingRateMs=100, parent=document) {
let el;
while (true) {
el = parent.querySelector(selector);
if (el) return el;
await delay(pollingRateMs);
}
}
function onNewAutocompleteChildren(mutationList) {
for (const mutation of mutationList) {
patchEntries(mutation.addedNodes);
}
}
function patchEntries(entries) {
for (const entry of entries) {
const nameHolder = entry.querySelector("span.autoCompleteNameHolder");
const uid = nameHolder.textContent.split(" ").at(-1).replace("(", "").replace(")", "");
const a = entry.querySelector("a");
a.href = `https://jamesriver.fellowshiponego.com/members/view/${uid}`;
}
}
const config = {
childList: true,
};
const autocomplete = await waitForElement("ul.top-nav-autocomplete");
const observer = new MutationObserver(onNewAutocompleteChildren);
observer.observe(autocomplete, config);
patchEntries(autocomplete.children);
})();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址