// ==UserScript== // @license MIT // @name 搜索美化: 百度/Bing去广告、自动翻页、界面美化、宽屏单列 // @name:zh-CN 搜索美化: 百度/Bing去广告、自动翻页、界面美化、宽屏单列 // @namespace search_beautify // @version 7.98 // @description 顶部工具栏毛玻璃效果、底部分页栏悬浮、搜索结果添加边框、搜索结果宽屏单列显示、隐藏工具栏、隐藏分页并自动加载下一页、鼠标悬停渐变光层效果。支持百度、Bing两大搜索引擎 // @description:zh-CN 顶部工具栏毛玻璃效果、底部分页栏悬浮、搜索结果添加边框、搜索结果宽屏单列显示、隐藏工具栏、隐藏分页并自动加载下一页、鼠标悬停渐变光层效果。支持百度、Bing两大搜索引擎 // @author 豆沙包里加辣椒 // @run-at document-start // @match https://www.baidu.com/* // @match https://www.bing.com/* // @match https://cn.bing.com/* // @match https://*.bing.com/* // @grant GM_addStyle // @grant GM_setValue // @grant GM_getValue // @downloadURL https://update.greasyfork.icu/scripts/573285/%E6%90%9C%E7%B4%A2%E7%BE%8E%E5%8C%96%3A%20%E7%99%BE%E5%BA%A6Bing%E5%8E%BB%E5%B9%BF%E5%91%8A%E3%80%81%E8%87%AA%E5%8A%A8%E7%BF%BB%E9%A1%B5%E3%80%81%E7%95%8C%E9%9D%A2%E7%BE%8E%E5%8C%96%E3%80%81%E5%AE%BD%E5%B1%8F%E5%8D%95%E5%88%97.user.js // @updateURL https://update.greasyfork.icu/scripts/573285/%E6%90%9C%E7%B4%A2%E7%BE%8E%E5%8C%96%3A%20%E7%99%BE%E5%BA%A6Bing%E5%8E%BB%E5%B9%BF%E5%91%8A%E3%80%81%E8%87%AA%E5%8A%A8%E7%BF%BB%E9%A1%B5%E3%80%81%E7%95%8C%E9%9D%A2%E7%BE%8E%E5%8C%96%E3%80%81%E5%AE%BD%E5%B1%8F%E5%8D%95%E5%88%97.meta.js // ==/UserScript== /** * 修改指定DOM * @param domSelector DOM选择器 * @param style 样式 */ function modifyDOM(domSelector, style){ GM_addStyle( domSelector + '{' + style + '}' ); } /** * 隐藏指定DOM * @param domSelector DOM选择器 */ function hideDOM(domSelector){ GM_addStyle( domSelector + '{display: none !important;}' ); } /** * 判断DOM包含类 * @param domSelector DOM选择器 * @param className 类名 */ function containDOMClass(domSelector, className){ const dom = getDOM(domSelector); if(dom) { return dom.classList.contains(className); } else { return false; } } /** * 替换DOM类 * @param domSelector DOM选择器 * @param className 类名 */ function replaceDOMClass(domSelector, oldClassName, newClassName){ const dom = getDOMs(domSelector); getDOMs(domSelector).forEach(function(r){ r.classList.add(newClassName); r.classList.remove(oldClassName); }); } /** * 获取单个DOM * @param domSelector DOM选择器 * @returns DOM */ function getDOM(domSelector, retryTime) { return document.querySelector(domSelector); } /** * 获取多个DOM * @param domSelector DOM选择器 * @returns DOMs */ function getDOMs(domSelector) { return document.querySelectorAll(domSelector); } /** * 删除多个DOM * @param domSelector DOM选择器 */ function deleteDOMs(domSelector) { getDOMs(domSelector).forEach(function(r){ r.remove(); }); } /** * 移动DOM * @param srcDomSelector 来源DOM选择器 * @param dstDomSelector 目标DOM选择器 */ function moveBeforeDOM(srcDomSelector, dstDomSelector) { const srcDom = getDOM(srcDomSelector); const dstDom = getDOM(dstDomSelector); if(srcDom != null && dstDom != null) { dstDom.before(srcDom); } } /** * 检测当前搜索引擎 * @returns {string|null} 'baidu', 'bing' 或 null */ function getSearchEngine() { const host = window.location.hostname.toLowerCase(); if (host.includes('baidu.com')) return 'baidu'; if (host.includes('bing.com')) return 'bing'; return null; } /** * 生成回到顶部按钮 */ function generateScrollToTopElement(){ const tmpDivA = document.createElement("div"); tmpDivA.id = 'scrollToTopA'; tmpDivA.classList.add('scrollToTop'); tmpDivA.style = 'position: fixed; bottom: 80px; border-radius: 50%; cursor: pointer; height: 44px; width: 44px; align-items: center; justify-content: center; box-shadow: 0 2px 4px 0 rgba(0,0,0,.05); background: #fff; right: 50px; z-index: 1000;'; tmpDivA.innerHTML = ''; tmpDivA.onclick = function() { window.scrollTo({ left: 0, top: 0, behavior: 'smooth' }); }; getDOM('html').appendChild(tmpDivA); replaceDOMClass('.scrollToTop', 'show', 'hide'); // 通用回到顶部按钮样式 GM_addStyle( '#scrollToTopA{right: 50px}' + '.scrollToTop.show{display: flex}' + '.scrollToTop.hide{display: none}' ); } /** * 显示提示信息 */ function showToast(msg){ deleteDOMs('#pageLoaded'); var m = document.createElement('div'); m.id = 'pageLoaded'; m.innerHTML = msg; m.style = "padding:0 14px; height: 40px; color: white; line-height: 40px; text-align: center; border-radius: 10px; position: fixed; bottom: 5%; left: 50%; transform: translate(-50%, -50%); z-index: 9999; background: rgba(0, 0, 0, 0.7); font-size: 16px;"; document.body.appendChild(m); setTimeout(function() { var d = 0.5; m.style.webkitTransition = '-webkit-transform ' + d + 's ease-in, opacity ' + d + 's ease-in'; m.style.opacity = '0'; }, 500); } /** * 获取URL参数 */ function getUrlParam(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); var r = window.location.search.substr(1).match(reg); if (r != null) return unescape(r[2]); return null; } /** * 强制居中布局(用JS直接操作DOM,优先级最高) */ function forceCenterLayout() { const wrapper = document.querySelector('#wrapper'); const container = document.querySelector('#container'); const contentLeft = document.querySelector('#content_left'); if (!container) return; // 计算容器宽度:92vw,最大1400px const viewportWidth = window.innerWidth; let containerWidth = Math.min(viewportWidth * 0.92, 1400); containerWidth = Math.max(containerWidth, 600); // 最小600px // 强制设置wrapper if (wrapper) { wrapper.style.cssText = ` width: 100% !important; display: block !important; float: none !important; position: relative !important; left: auto !important; transform: none !important; `; } // 强制设置container居中 container.style.cssText = ` width: ${containerWidth}px !important; margin: 0 auto !important; padding: 0 24px !important; box-sizing: border-box !important; float: none !important; position: relative !important; left: auto !important; right: auto !important; transform: none !important; `; // 强制设置content_left if (contentLeft) { contentLeft.style.cssText = ` width: 100% !important; float: none !important; margin: 0 !important; padding: 0 !important; `; } console.log('[搜索美化] 强制居中完成,容器宽度:', containerWidth, 'px'); } /** * 主初始化函数 */ function init() { const engine = getSearchEngine(); if (engine === 'baidu') { initBaidu(); } else if (engine === 'bing') { initBing(); } // 通用的回到顶部按钮 generateScrollToTopElement(); } // ==================== 百度搜索初始化 ==================== function initBaidu() { // 增强页面立体效果 - 渐变背景 GM_addStyle( 'body{background: linear-gradient(180deg, #f0f2f5 0%, #ffffff 100%) !important;}' ); // 搜索框区域居中显示 modifyDOM('#head', 'background-color: rgba(248,248,248,0.4)'); modifyDOM('.head_wrapper', 'width: 90%; max-width: 1200px; margin: 0 auto;'); modifyDOM('.s_form', 'backdrop-filter: blur(10px); width: 100%;'); modifyDOM('.s_form_wrapper', 'width: 100%; display: flex; justify-content: center'); modifyDOM('#form', 'width: 100%; max-width: 800px; margin: 0 auto'); hideDOM('[tpl="app/search-tag"]'); // 工具栏样式, 透明效果 modifyDOM('#s_tab', 'height: 11px; border-bottom: #e0e0e0 1px solid; background-color: rgba(248,248,248,0.4) !important; overflow: hidden;') modifyDOM('.s_tab_inner', 'background-color: rgba(248,248,248,0.4)'); // 去除右侧 hideDOM('#content_right'); // ==================== 宽屏单列布局(CSS先行 + JS强制)==================== // 核心思路:CSS先做基础居中避免闪烁,JS再强制精确控制 // 第一步:CSS立即注入基础居中样式(避免先居左再居中) GM_addStyle(` /* 基础居中 - 防止闪烁 */ #wrapper { width: 100% !important; } #container { width: min(92vw, 1400px) !important; margin: 0 auto !important; padding: 0 24px !important; box-sizing: border-box !important; } #content_left { width: 100% !important; float: none !important; } #content_left > div, #content_left > table { width: 100% !important; } `); // 搜索框居中修复 GM_addStyle(` /* 顶部整体居中 */ .head_wrapper { width: 100% !important; display: flex !important; justify-content: center !important; } /* 搜索框限制宽度 */ #form { width: 100% !important; max-width: 700px !important; margin: 0 auto !important; } `); // 第二步:JS立即执行强制居中(用requestAnimationFrame确保DOM存在) function tryForceCenter() { if (document.querySelector('#container')) { forceCenterLayout(); } else { requestAnimationFrame(tryForceCenter); } } // 尝试立即执行,如果DOM没准备好就等待 if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', forceCenterLayout); } else { requestAnimationFrame(tryForceCenter); } // 监听窗口大小变化 window.addEventListener('resize', function() { clearTimeout(window.resizeTimer); window.resizeTimer = setTimeout(forceCenterLayout, 50); }); GM_addStyle( '.new-pmd .c-span8{width: calc(100% - 192px) !important}' + '.new-pmd .c-span9{width: calc(100% - 144px) !important}' + '.new-pmd .c-span12{width: 100% !important}' + // 内容卡美化 '#content_left>div{background: #f5e4ea !important; margin-right:0 !important;margin-bottom:20px !important;border-radius:12px !important;padding:16px !important;-webkit-box-shadow: 0 2px 5px 0 rgba(0,0,0,.1) !important;}' + '#content_left>table{margin-right:0 !important;margin-bottom:20px !important;border-radius:12px !important;-webkit-box-shadow: 0 2px 5px 0 rgba(0,0,0,.1) !important;}' + '#content_left>table>tbody>tr>td{padding:16px !important}' + '#content_left>table>tbody>tr>td>div{width:560px !important;-webkit-box-shadow:unset !important;border: none !important;padding: 0 !important}' + '.c-border{-webkit-box-shadow:unset !important;margin-bottom: 0 !important;border: none !important}' + '[class*="single-card-wrapper"] {margin: -46px -16px -16px; padding: 46px 16px 10px 16px !important; box-shadow: unset !important}' + '[class*=content-border] {box-shadow: unset !important}' + '.wd-ai-index-pc {margin: -16px !important; width: unset !important}' + '.new-pmd.c-container {width: fit-content !important}' + // 隐藏相关搜索&其他人在搜 '#rs_new, [tpl=recommend_list], [tpl=app\\/footer], div[data-click="{"]{display: none !important}' + // 隐藏分页栏(使用自动翻页) '#page{display: none !important; visibility: hidden !important; height: 0 !important;}' + // 鼠标悬停渐变光层效果 '#content_left>div{position: relative; overflow: hidden;}' + '#content_left>div::before{content: ""; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(0, 255, 255, 0.15), rgba(138, 43, 226, 0.12), transparent); transition: none; pointer-events: none; z-index: 1;}' + '#content_left>div:hover::before{left: 100%; transition: left 1.2s ease-in-out;}' + '#content_left>div:hover{transform: scale(1.015); background-color: #e4f5f4 !important; box-shadow: 0 4px 15px 0 rgba(0,0,0,0.15) !important; transition: transform 0.3s ease, box-shadow 0.3s ease, background-color 0.3s ease !important; z-index: 10;}' + // 表格结果悬停效果 '#content_left>table{background: #f5e4ea !important; position: relative; overflow: hidden;}' + '#content_left>table::before{content: ""; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(0, 255, 255, 0.15), rgba(138, 43, 226, 0.12), transparent); transition: none; pointer-events: none; z-index: 1;}' + '#content_left>table:hover::before{left: 100%; transition: left 1.2s ease-in-out;}' + '#content_left>table:hover{transform: scale(1.015); background-color: #e4f5f4 !important; box-shadow: 0 4px 15px 0 rgba(0,0,0,0.15) !important; transition: transform 0.3s ease, box-shadow 0.3s ease, background-color 0.3s ease !important; z-index: 10;}' ); if(getDOM('#su')) getDOM('#su').onclick = function() {currentUrl = document.location.href; currentPage = getUrlParam("pn");} if(getDOM('#kw')) getDOM('#kw').onkeydown = function() {if(event.keyCode==13) {currentUrl = document.location.href; currentPage = getUrlParam("pn");}} } // ==================== Bing搜索初始化 ==================== function initBing() { // 增强页面立体效果 - 渐变背景 GM_addStyle( 'body{background: linear-gradient(180deg, #f0f2f5 0%, #ffffff 100%) !important;}' ); // 搜索框样式 - 居中显示 GM_addStyle(` /* 必应搜索框居中 */ #sb_form { max-width: 800px !important; margin: 0 auto !important; width: 100% !important; display: flex !important; justify-content: center !important; } .b_searchboxForm { max-width: 800px !important; margin: 0 auto !important; width: 100% !important; } #searchbox { max-width: 800px !important; margin: 0 auto !important; } `); modifyDOM('#sb_form_q', 'border-radius: 24px !important; padding: 10px 20px !important; font-size: 16px !important;'); // 去除右侧边栏 hideDOM('#b_context'); // 宽屏单列布局 - 解决留白问题 GM_addStyle(` /* Bing宽屏居中布局 - 更宽适配 */ #b_content { width: min(92vw, 1400px) !important; margin: 0 auto !important; padding: 0 24px !important; float: none !important; } #b_results { width: 100% !important; max-width: 100% !important; float: none !important; } /* 让搜索结果卡片撑满宽度 */ .b_algo { width: 100% !important; max-width: 100% !important; } /* Bing结果卡片美化 */ .b_algo { background: #f5e4ea !important; border-radius: 12px !important; padding: 16px !important; margin-bottom: 16px !important; box-shadow: 0 2px 8px rgba(0,0,0,0.08) !important; position: relative; overflow: hidden; } /* 隐藏侧边推荐 */ #b_context, #b_pole, #b_footer { display: none !important; } /* 隐藏必应分页栏(使用自动翻页) */ #b_pag, #b_pag ul, .sb_pag, nav[role="navigation"], .b_pag { display: none !important; visibility: hidden !important; height: 0 !important; overflow: hidden !important; } /* 鼠标悬停渐变光层效果 */ .b_algo::before { content: ""; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(0, 255, 255, 0.15), rgba(138, 43, 226, 0.12), transparent); transition: none; pointer-events: none; z-index: 1; } .b_algo:hover::before { left: 100%; transition: left 1.2s ease-in-out; } .b_algo:hover { transform: scale(1.015); background-color: #e4f5f4 !important; box-shadow: 0 4px 15px rgba(0,0,0,0.15) !important; transition: transform 0.3s ease, box-shadow 0.3s ease, background-color 0.3s ease !important; z-index: 10; } /* 顶部导航栏透明效果 */ #b_header { background-color: rgba(248,248,248,0.4) !important; backdrop-filter: blur(10px); } /* 图片结果样式 */ .b_imageItem { border-radius: 12px !important; overflow: hidden !important; } /* 工具栏样式 */ #b_tween { background-color: rgba(248,248,248,0.4) !important; } /* 隐藏Deep dive推荐搜索和相关搜索 */ .b_rs, .b_ans.b_slug, li.b_ans, .b_dynSlice, #brsv3, .b_rrsr, #b_results li.b_ans, #b_results [id*="Deep dive"] { display: none !important; } /* 搜索建议下拉框 */ .sa_as { background: rgba(255,255,255,0.98) !important; border-radius: 12px !important; box-shadow: 0 4px 15px rgba(0,0,0,0.15) !important; } `); // Bing翻页变量 window.bingCurrentUrl = document.location.href; window.bingCurrentPage = getBingPageNum(); } /** * 获取Bing当前页码 */ function getBingPageNum() { const firstResult = getDOM('.b_algo'); if (!firstResult) return 1; const urlParams = new URLSearchParams(window.location.search); const first = parseInt(urlParams.get('first')) || 1; return Math.floor(first / 10) + 1; } /** * Bing自动翻页(可选功能,需要用户手动触发) */ function loadNextPageBing() { // 防重入检查 if (window.bingLoading) { console.log('[搜索美化] Bing正在加载中,忽略重复请求'); return; } window.bingLoading = true; showToast('加载中...'); var xhr = new XMLHttpRequest(); var urlParams = new URLSearchParams(window.location.search); var currentFirst = parseInt(urlParams.get('first')) || 1; var nextFirst = currentFirst + 10; // 保留其他参数,只更新first urlParams.set('first', nextFirst); var nextPageUrl = window.location.pathname + '?' + urlParams.toString(); console.log('[搜索美化] Bing加载下一页:', nextPageUrl); xhr.open("GET", nextPageUrl); xhr.send(); xhr.onreadystatechange = function(){ if(xhr.readyState === 4 && xhr.status === 200){ var parser = new DOMParser(); var doc = parser.parseFromString(xhr.responseText, "text/html"); var results = doc.querySelectorAll('.b_algo'); var container = getDOM('#b_results'); console.log('[搜索美化] Bing找到结果:', results.length); if (container && results.length > 0) { for (var i = 0; i < results.length; i++) { container.appendChild(results[i].cloneNode(true)); } showToast('已加载更多结果'); // 重新绑定Bing卡片点击事件 bindBingCardClick(); } else { showToast('没有更多结果了'); } window.bingLoading = false; } else if (xhr.readyState === 4 && xhr.status !== 200) { console.error('[搜索美化] Bing请求失败:', xhr.status); showToast('加载失败'); window.bingLoading = false; } } window.bingCurrentUrl = nextPageUrl; } /** * 绑定Bing卡片点击事件(整个卡片可点击) */ function bindBingCardClick() { const results = getDOMs('.b_algo'); results.forEach(function(card) { card.style.cursor = 'pointer'; card.onclick = function(e) { const link = card.querySelector('h2 a, a[href]'); if (link && !e.target.closest('a')) { e.preventDefault(); window.location.href = link.href; } }; }); } // ==================== 全局变量和事件绑定 ==================== var currentUrl = document.location.href; var currentPage = getUrlParam("pn"); // 防重入标志 window.baiduLoading = false; window.bingLoading = false; // 滚动事件防抖定时器 window.scrollDebounceTimer = null; // 已加载的页码记录 window.loadedPages = new Set(); window.loadedPages.add(parseInt(currentPage) || 0); console.log('[搜索美化] 脚本初始化完成,引擎:', getSearchEngine()); console.log('[搜索美化] 初始页码:', currentPage); /** * 百度自动翻页(修复版 - 带防重入机制) */ function loadNextPage(){ // 防重入检查 if (window.baiduLoading) { console.log('[搜索美化] 百度正在加载中,忽略重复请求'); return; } var nextPage; if(currentPage == null){ currentPage = 0; nextPage = 10; } else { nextPage = parseInt(currentPage) + 10; } // 检查是否已加载过这一页 if (window.loadedPages.has(nextPage)) { console.log('[搜索美化] 第', nextPage, '页已加载过,跳过'); return; } window.loadedPages.add(nextPage); window.baiduLoading = true; showToast('加载第' + (nextPage/10 + 1) + '页...'); console.log('[搜索美化] 开始加载第', nextPage/10 + 1, '页'); var xhr = new XMLHttpRequest(); var nextPageUrl; // 构造下一页URL if(currentUrl.includes('pn=')){ nextPageUrl = currentUrl.replace(/pn=\d*/, 'pn=' + nextPage); } else if (currentUrl.includes('?')) { nextPageUrl = currentUrl + '&pn=' + nextPage; } else { nextPageUrl = currentUrl + '?pn=' + nextPage; } console.log('[搜索美化] 下一页URL:', nextPageUrl); xhr.open("GET", nextPageUrl); xhr.send(); xhr.onreadystatechange = function(){ if(xhr.readyState === 4 && xhr.status === 200){ var parser = new DOMParser(); var doc = parser.parseFromString(xhr.responseText, "text/html"); // 尝试多种选择器获取搜索结果 var results = doc.querySelectorAll('#content_left > div:not([id^="slider"]), #content_left > table'); console.log('[搜索美化] 解析到搜索结果数量:', results.length); var container = document.querySelector('#content_left'); if (container && results.length > 0) { for (var i = 0; i < results.length; i++) { // 排除广告和重复内容 var r = results[i]; if(!r.querySelector('.ec_wise_ad') && !r.classList.contains('result-op') && !r.classList.contains('help-author-wrap')){ container.appendChild(r.cloneNode(true)); } } showToast('已加载第' + (nextPage/10 + 1) + '页'); console.log('[搜索美化] 成功追加结果到第', nextPage/10 + 1, '页'); // 重新应用样式到新加载的内容 setTimeout(function(){ var newCards = document.querySelectorAll('#content_left > div:not([data-styled]):not([id^="slider"]), #content_left > table:not([data-styled])'); newCards.forEach(function(card){ card.setAttribute('data-styled', 'true'); card.style.background = '#f5e4ea'; card.style.borderRadius = '12px'; card.style.marginBottom = '20px'; card.style.padding = '16px'; card.style.boxShadow = '0 2px 5px rgba(0,0,0,0.1)'; card.style.position = 'relative'; card.style.overflow = 'hidden'; }); }, 100); // 检查是否需要继续加载 var clientHeight = document.documentElement.clientHeight || document.body.clientHeight; var scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight; console.log('[搜索美化] clientHeight:', clientHeight, 'scrollHeight:', scrollHeight); } else { showToast('没有更多结果了'); console.log('[搜索美化] 未找到更多结果'); } // 重置状态,允许下一次加载 window.baiduLoading = false; } else if (xhr.readyState === 4 && xhr.status !== 200) { console.error('[搜索美化] 请求失败,状态码:', xhr.status); showToast('加载失败,请检查网络'); window.baiduLoading = false; // 移除已记录但加载失败的页码,允许重试 window.loadedPages.delete(nextPage); } } currentUrl = nextPageUrl; currentPage = nextPage; } function scrollToTopF(){ window.scrollTo({ left: 0, top: 0, behavior: 'smooth' }); } // ==================== 主程序入口 ==================== ( function() { 'use strict'; const engine = getSearchEngine(); // 初始化 init(); document.addEventListener('DOMContentLoaded',function(e){ generateScrollToTopElement(); // 根据不同搜索引擎绑定卡片点击事件 if (engine === 'baidu') { // 让整个卡片可点击(添加空值检查,防止元素不存在时报错) const contentLeft = document.querySelector('#content_left'); if (contentLeft) { contentLeft.addEventListener('click', function(e) { const card = e.target.closest('#content_left > div, #content_left > table'); if (card) { const link = card.querySelector('a[href]'); if (link && !e.target.closest('a')) { e.preventDefault(); link.click(); } } }); } } else if (engine === 'bing') { // Bing卡片点击事件 setTimeout(function() { bindBingCardClick(); }, 1000); } }); window.onload = function(){ // 百度页面:强制居中 if (engine === 'baidu') { forceCenterLayout(); } // 添加观察者,监控样式变化(添加防抖避免无限循环) var observerDebounce = null; var observer = new MutationObserver(function(mutations) { // 防抖:300ms内只执行一次 clearTimeout(observerDebounce); observerDebounce = setTimeout(function() { if (engine === 'baidu') { forceCenterLayout(); } }, 300); }); // 根据不同搜索引擎选择观察目标 if (engine === 'baidu') { var target = document.querySelector('#wrapper'); if (target) { observer.observe(target, { attributes: true }); } } else if (engine === 'bing') { var bingTarget = document.querySelector('#b_results'); if (bingTarget) { observer.observe(bingTarget, { childList: true, subtree: true }); } } } // 使用 requestAnimationFrame 优化滚动事件 let ticking = false; window.addEventListener('scroll', function() { if (!ticking) { window.requestAnimationFrame(function() { handleScroll(); ticking = false; }); ticking = true; } }); function handleScroll() { let scrollTop = document.documentElement.scrollTop || document.body.scrollTop; let clientHeight = document.documentElement.clientHeight || document.body.clientHeight; let scrollHeight = document.documentElement.scrollHeight || document.body.scrollHeight; // 回到顶部按钮显示/隐藏 if(scrollTop <= 200) { replaceDOMClass('.scrollToTop', 'show', 'hide'); } else { replaceDOMClass('.scrollToTop', 'hide', 'show'); } // 防抖:使用 setTimeout 确保在滚动停止后才触发加载 if (window.scrollDebounceTimer) { clearTimeout(window.scrollDebounceTimer); } // 滚动到底部检测 - 需要滚动停止后100ms才触发 window.scrollDebounceTimer = setTimeout(function() { // 百度自动翻页 if (engine === 'baidu') { // 只在真正滚动到底部时触发 var distanceToBottom = scrollHeight - scrollTop - clientHeight; console.log('[搜索美化] 百度滚动检测 - 距底部:', distanceToBottom, 'px'); if (distanceToBottom <= 50) { // 距离底部50px内才触发 loadNextPage(); } } // Bing自动翻页 if (engine === 'bing') { var distanceToBottom = scrollHeight - scrollTop - clientHeight; console.log('[搜索美化] Bing滚动检测 - 距底部:', distanceToBottom, 'px'); if (distanceToBottom <= 50) { loadNextPageBing(); } } }, 100); } } )();