Solscan重定向

重定向 Solscan 账户页面到带有过滤参数的 URL,包括页面内跳转

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name        Solscan重定向
// @namespace   Violentmonkey Scripts
// @match       https://solscan.io/*
// @grant       none
// @version     1.3
// @author      memeslayer
// @license     MIT
// @description 重定向 Solscan 账户页面到带有过滤参数的 URL,包括页面内跳转
// ==/UserScript==

(function() {
  'use strict';

  let redirectEnabled = true; // 添加一个变量来控制跳转功能

  function toggleRedirect() {
    redirectEnabled = !redirectEnabled; // 切换跳转功能的状态
    const buttonText = redirectEnabled ? '关' : '开'; // 修正按钮文本逻辑
    document.getElementById('toggleRedirectButton').innerText = buttonText; // 更新按钮显示
  }

  function redirectIfAccountPage() {
    if (!redirectEnabled) return; // 如果跳转功能被关闭,直接返回

    const currentUrl = window.location.href;
    // 匹配三种URL模式
    const plainPattern = /^https:\/\/solscan\.io\/account\/[^?#]+$/;
    const transfersPattern = /^https:\/\/solscan\.io\/account\/[^?#]+#transfers$/;
    const defiPattern = /^https:\/\/solscan\.io\/account\/[^?#]+#defiactivities$/;

    if (plainPattern.test(currentUrl) || transfersPattern.test(currentUrl)) {
      // 处理普通账户页面和transfers页面重定向
      const accountAddress = currentUrl.split('/').pop().split('#')[0];
      const newUrl = `https://solscan.io/account/${accountAddress}?activity_type=ACTIVITY_SPL_TRANSFER&remove_spam=true&exclude_amount_zero=true&flow=in&value=100&value=undefined&token_address=So11111111111111111111111111111111111111111#transfers`;
      if (currentUrl !== newUrl) {
        window.location.replace(newUrl);
      }
    } else if (defiPattern.test(currentUrl)) {
      // 处理defi活动页面重定向
      const accountAddress = currentUrl.split('/').pop().split('#')[0];
      const newUrl = `https://solscan.io/account/${accountAddress}?activity_type=ACTIVITY_SPL_INIT_MINT&activity_type=ACTIVITY_TOKEN_ADD_LIQ&activity_type=ACTIVITY_TOKEN_REMOVE_LIQ#defiactivities`;
      if (currentUrl !== newUrl) {
        window.location.replace(newUrl);
      }
    }
  }

  // 初始页面加载时检查
  redirectIfAccountPage();

  // 监听 pushState 和 replaceState 方法的变化
  (function(history){
    const pushState = history.pushState;
    history.pushState = function(state) {
      if (typeof history.onpushstate == "function") {
        history.onpushstate({state: state});
      }
      setTimeout(redirectIfAccountPage, 0);
      return pushState.apply(history, arguments);
    };

    const replaceState = history.replaceState;
    history.replaceState = function (state) {
      if (typeof history.onreplacestate == "function") {
        history.onreplacestate({ state: state });
      }
      setTimeout(redirectIfAccountPage, 0);
      return replaceState.apply(history, arguments);
    };

    window.addEventListener('popstate', function(event) {
      redirectIfAccountPage();
    });
  })(window.history);

  // 创建悬浮窗
  const floatingWindow = document.createElement('div');
  floatingWindow.style.position = 'fixed';
  floatingWindow.style.top = '20%';
  floatingWindow.style.right = '20px';
  floatingWindow.style.width = '300px';
  floatingWindow.style.backgroundColor = 'rgba(0, 0, 0, 0.8)';
  floatingWindow.style.padding = '15px';
  floatingWindow.style.borderRadius = '10px';
  floatingWindow.style.color = 'white';
  floatingWindow.style.zIndex = '999';
  floatingWindow.style.fontSize = '14px';
  floatingWindow.style.lineHeight = '1.5';
  floatingWindow.style.display = 'none'; // 默认隐藏

  // 设置悬浮窗内容
  floatingWindow.innerHTML = `
    <div style="margin-bottom: 10px;"><span style="color: red;">rug?</span></div>
    <div style="margin-bottom: 5px;">changenow 南美 非托管</div>
    <div style="margin-bottom: 5px;">Bitkub 泰国</div>
    <div style="margin-bottom: 5px;">Bitso 墨西哥</div>
    <div style="margin-bottom: 5px;">CoinDCX 印度</div>
    <div style="margin-bottom: 5px;">KuCoin 塞舌尔</div>
    <div style="margin-bottom: 5px;">Indodax 印尼</div>
    <div style="margin-bottom: 5px;">BtcTurk 土耳其</div>
    <div style="margin: 10px 0;"><span style="color: #4CAF50;">safe?</span></div>
    <div style="margin-bottom: 5px;">Crypto.com Phemex BingX 新加坡</div>
    <div style="margin-bottom: 5px;">Luno 新加坡- 非洲东南亚</div>
    <div style="margin-bottom: 5px;">Coincheck BitTrade bitFlyer Liquid 日本</div>
    <div style="margin-bottom: 5px;">Bitvavo Deribit荷兰</div>
    <div style="margin-bottom: 5px;">Bitfinex CEX.IO 英属维尔京 英国</div>
    <div style="margin-bottom: 5px;">Bittrex 美国</div>
    <div style="margin-bottom: 5px;">Bitstamp 罗森堡</div>
    <div style="margin-bottom: 5px;">Bithumb upbit 韩国</div>
    <div style="margin-bottom: 5px;">SwissBorg 瑞士</div>
  `;

  document.body.appendChild(floatingWindow);

  // 创建控制悬浮窗的按钮
  const toggleWindowButton = document.createElement('button');
  toggleWindowButton.innerText = '显';
  toggleWindowButton.style.position = 'fixed';
  toggleWindowButton.style.top = '50%';
  toggleWindowButton.style.right = '80px'; // 位于跳转按钮左侧
  toggleWindowButton.style.transform = 'translateY(-50%)';
  toggleWindowButton.style.zIndex = '1000';
  toggleWindowButton.style.padding = '10px 15px';
  toggleWindowButton.style.backgroundColor = '#4CAF50';
  toggleWindowButton.style.color = 'white';
  toggleWindowButton.style.border = 'none';
  toggleWindowButton.style.borderRadius = '5px';
  toggleWindowButton.style.cursor = 'pointer';
  toggleWindowButton.style.fontSize = '16px';
  
  // 添加点击事件
  toggleWindowButton.onclick = function() {
    const isVisible = floatingWindow.style.display !== 'none';
    floatingWindow.style.display = isVisible ? 'none' : 'block';
    toggleWindowButton.innerText = isVisible ? '显' : '隐';
  };
  
  document.body.appendChild(toggleWindowButton);

  // 创建按钮并添加到页面
  const button = document.createElement('button');
  button.id = 'toggleRedirectButton';
  button.innerText = '关'; // 初始文本,因为 redirectEnabled 初始值为 true
  button.style.position = 'fixed'; // 固定位置
  button.style.top = '50%'; // 距离顶部50%
  button.style.right = '20px'; // 距离右侧20px
  button.style.transform = 'translateY(-50%)'; // 垂直居中
  button.style.zIndex = '1000'; // 确保按钮在最上层
  button.style.padding = '10px 15px'; // 添加内边距
  button.style.backgroundColor = '#4CAF50'; // 背景颜色
  button.style.color = 'white'; // 字体颜色
  button.style.border = 'none'; // 去掉边框
  button.style.borderRadius = '5px'; // 圆角
  button.style.cursor = 'pointer'; // 鼠标悬停时显示为手型
  button.style.fontSize = '16px'; // 字体大小
  button.onclick = toggleRedirect; // 直接使用 toggleRedirect 函数,移除额外的点击处理逻辑
  document.body.appendChild(button); // 将按钮添加到页面

  // 新增多Token筛选跳转按钮
  const multiTokenButton = document.createElement('button');
  multiTokenButton.innerText = '多Token筛选';
  multiTokenButton.style.position = 'fixed';
  multiTokenButton.style.top = '70%';
  multiTokenButton.style.right = '20px';
  multiTokenButton.style.transform = 'translateY(-50%)';
  multiTokenButton.style.zIndex = '1000';
  multiTokenButton.style.padding = '10px 15px';
  multiTokenButton.style.backgroundColor = '#2196F3';
  multiTokenButton.style.color = 'white';
  multiTokenButton.style.border = 'none';
  multiTokenButton.style.borderRadius = '5px';
  multiTokenButton.style.cursor = 'pointer';
  multiTokenButton.style.fontSize = '16px';

  // 按钮点击事件:跳转到多Token筛选URL(动态获取当前账户地址)
  multiTokenButton.onclick = function() {
    // 获取当前URL中的account地址
    const match = window.location.href.match(/^https:\/\/solscan\.io\/account\/([^?#]+)/);
    const accountAddress = match ? match[1] : 'ADj7cSMTyoB4cyx2puLN5uTyzZDJdtwQ1KxST5GRtkTL'; // 默认示例地址
    // 多Token合约地址,逗号分隔
    const tokenAddresses = [
      'So11111111111111111111111111111111111111111', // SOL
      'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v', // USDC
      'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB'  // USDT
    ].join('%2C');
    // 拼接目标URL
    const targetUrl = `https://solscan.io/account/${accountAddress}?activity_type=ACTIVITY_SPL_TRANSFER&exclude_amount_zero=true&remove_spam=true&flow=in&value=100&value=undefined&token_address=${tokenAddresses}#transfers`;
    window.location.href = targetUrl;
  };

  document.body.appendChild(multiTokenButton);

})();