您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Show a Mastodon-style banner to view profiles on your own instance (avoids broken post links)
- // ==UserScript==
- // @name Mastodon View in Home Instance
- // @version 1.5
- // @description Show a Mastodon-style banner to view profiles on your own instance (avoids broken post links)
- // @author https://mastodon.online/@prvrtl
- // @match https://*/@*
- // @grant none
- // @namespace https://greasyfork.org/users/1458606
- // ==/UserScript==
- (function () {
- const homeInstance = "mastodon.online";
- const currentHost = window.location.hostname;
- if (currentHost === homeInstance) return;
- const path = window.location.pathname;
- const usernameMatch = path.match(/^\/@([^\/]+)/); // only username part
- if (!usernameMatch) return;
- const username = usernameMatch[1];
- const federatedHost = currentHost.replace(/^www\./, "");
- const redirectUrl = `https://${homeInstance}/@${username}@${federatedHost}`;
- // Create styled banner
- const banner = document.createElement("div");
- banner.style.cssText = `
- position: fixed;
- top: 0;
- left: 0;
- right: 0;
- background: #282c37;
- color: white;
- padding: 12px 20px;
- font-family: system-ui, BlinkMacSystemFont, sans-serif;
- font-size: 15px;
- z-index: 9999;
- display: flex;
- justify-content: space-between;
- align-items: center;
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.6);
- border-bottom: 1px solid #444;
- `;
- const text = document.createElement("div");
- text.innerHTML = `🌍 You're viewing a Mastodon profile on <strong>${currentHost}</strong>.`;
- const button = document.createElement("button");
- button.textContent = `Open in ${homeInstance}`;
- button.style.cssText = `
- background: #6364ff;
- color: white;
- border: none;
- padding: 8px 16px;
- font-weight: 600;
- font-size: 14px;
- border-radius: 6px;
- cursor: pointer;
- transition: background 0.2s ease;
- box-shadow: inset 0 0 0 1px rgba(255,255,255,0.1);
- `;
- button.addEventListener("mouseover", () => {
- button.style.background = "#5253e6";
- });
- button.addEventListener("mouseout", () => {
- button.style.background = "#6364ff";
- });
- button.addEventListener("click", () => {
- window.location.href = redirectUrl;
- });
- banner.appendChild(text);
- banner.appendChild(button);
- document.body.style.paddingTop = "64px";
- document.body.prepend(banner);
- })();