百度搜索框精简

精简百度搜索框:只保留单行输入框与搜索按钮,移除所有 AI / 文心助手相关元素

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name         百度搜索框精简
// @version      1.4
// @description  精简百度搜索框:只保留单行输入框与搜索按钮,移除所有 AI / 文心助手相关元素
// @author       Zero
// @match        https://www.baidu.com/*
// @match        https://www.baidu.com/s*
// @grant        GM_addStyle
// @license      GPL-3.0
// @namespace    https://greasyfork.org/users/290555
// ==/UserScript==

(function () {
  'use strict';

  /* ================== 环境判断 ================== */
  const isBaidu =
    location.hostname === 'www.baidu.com';

  document.documentElement.classList.toggle('tm-bd-home', isBaidu);

  /* ================== 样式层(主杀器) ================== */
  GM_addStyle(`
    /* ===== 通用:隐藏 AI / 工具 ===== */
    #chat-input-main .chat-input-tool #left-tool,
    #chat-input-main .chat-input-tool #right-tool,
    #chat-input-main .right-tool_3we_U,
    #chat-input-main #voice-input-wrapper,
    #chat-input-main .tool-item_1e6GD,
    #chat-input-main .tools-clear-icon {
      display: none !important;
    }

    /* 防止工具层遮挡输入框 */
    .san-card[tpl="chat-input"] .chat-input-tool {
      pointer-events: auto !important;
    }

    #chat-input-main.one-line-input .tools-placeholder-wrapper {
      display: none !important;
    }

    /* ===== 首页:隐藏搜索框下方功能区 ===== */
    .tm-bd-home .panel-list_8jHmm,
    .tm-bd-home #chat-input-extension,
    .tm-bd-home .more-dropdown-container {
      display: none !important;
    }

    /* ===== 首页:强制单行 ===== */
    .tm-bd-home #chat-input-main {
      height: auto !important;
    }

    .tm-bd-home #chat-input-main.two-line-input {
      padding-bottom: 0 !important;
    }

    .tm-bd-home #chat-input-main .chat-input-wrapper .chat-input-container {
      padding-top: 9px !important;
      padding-bottom: 9px !important;
    }

    /* ===== 首页:按钮垂直居中 ===== */
    .tm-bd-home #chat-input-main.one-line-input .chat-input-tool {
      padding-top: 2px !important;
    }

    /* ===== 搜索按钮样式修正 ===== */
    .tm-bd-home #chat-input-main.one-line-input #chat-submit-button {
      height: 37px !important;
      width: 108px !important;
      padding: 0 !important;
      line-height: 37px !important;
      display: flex !important;
      align-items: center !important;
      justify-content: center !important;
      font-size: 17px !important;
      font-weight: 500 !important;
      border: none !important;
      box-sizing: border-box !important;
    }

    /* ===== 候选词:彻底移除「用文心助手回答」 ===== */
    #chat-input-panel .ask-ai-tail-wrapper,
    #chat-input-panel .ask-ai-tail,
    #chat-input-panel .ask-ai-tail-blank {
      display: none !important;
      visibility: hidden !important;
      pointer-events: none !important;
    }

    /* 防止隐藏后仍占位 */
    #chat-input-panel .bdsug-item {
      padding-right: 0 !important;
    }

    /* 去除分割线 */
    #chat-input-panel .chat-input-panel-divider {
      border: none !important;
    }
  `);

  /* ================== 工具函数 ================== */
  const waitFor = (sel, timeout = 10000) =>
    new Promise((resolve, reject) => {
      const start = Date.now();
      const timer = setInterval(() => {
        const el = document.querySelector(sel);
        if (el) {
          clearInterval(timer);
          resolve(el);
        } else if (Date.now() - start > timeout) {
          clearInterval(timer);
          reject();
        }
      }, 100);
    });

  /* ================== 首页强制单行 ================== */
  function forceHomeOneLine() {
    if (!isBaidu) return;
    const main = document.querySelector('#chat-input-main');
    if (!main) return;

    main.classList.add('one-line-input');
    main.classList.remove('two-line-input');

    const btn = main.querySelector('#chat-submit-button');
    const rightWrap = main.querySelector('.right-tools-wrapper');
    if (btn && rightWrap && btn.parentElement !== rightWrap) {
      rightWrap.appendChild(btn);
    }
  }

  /* ================== DOM 层:物理删除 AI 尾巴 ================== */
  function removeAskAiTail() {
    document
      .querySelectorAll('#chat-input-panel .ask-ai-tail-wrapper')
      .forEach(el => el.remove());
  }

  /* ================== 初始化 ================== */
  async function init() {
    try {
      await waitFor('#chat-input-main');
      forceHomeOneLine();
      removeAskAiTail();

      if (isBaidu) {
        const main = document.querySelector('#chat-input-main');
        let lock = false;
        const obs = new MutationObserver(() => {
          if (lock) return;
          lock = true;
          requestAnimationFrame(() => {
            forceHomeOneLine();
            lock = false;
          });
        });
        obs.observe(main, { attributes: true, attributeFilter: ['class'] });
      }
    } catch (e) {}
  }

  init();

  /* ================== 全局兜底观察 ================== */
  const throttle = (fn, wait = 120) => {
    let t = null;
    return () => {
      if (t) return;
      t = setTimeout(() => {
        t = null;
        fn();
      }, wait);
    };
  };

  const removeThrottled = throttle(removeAskAiTail, 120);
  removeAskAiTail();

  const mo = new MutationObserver(removeThrottled);
  mo.observe(document.body, { childList: true, subtree: true });

})();