Greasy Fork

Greasy Fork is available in English.

搜索引擎键盘翻页助手

为主流搜索引擎添加键盘左右方向键翻页功能

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         搜索引擎键盘翻页助手
// @namespace    http://tampermonkey.net/
// @version      1.0
// @description  为主流搜索引擎添加键盘左右方向键翻页功能
// @author       Your name
// @match        *://www.google.com/search*
// @match        *://www.google.com.*/search*
// @match        *://www.baidu.com/*
// @match        *://cn.bing.com/search*
// @match        *://www.bing.com/search*
// @match        *://www.sogou.com/web*
// @match        *://www.so.com/s*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // 搜索引擎配置
    const engineConfig = {
        google: {
            host: ['www.google.com', 'www.google.com.hk', 'www.google.com.tw'],
            prevSelector: '#pnprev',
            nextSelector: '#pnnext'
        },
        baidu: {
            host: ['www.baidu.com'],
            prevSelector: '.page-inner_2jZi2 a:first-child',
            nextSelector: '.page-inner_2jZi2 a:last-child',
            prevText: '上一页',
            nextText: '下一页'
        },
        bing: {
            host: ['cn.bing.com', 'www.bing.com'],
            prevSelector: '.sb_pagP',
            nextSelector: '.sb_pagN'
        },
        sogou: {
            host: ['www.sogou.com'],
            prevSelector: 'a.p[id^="sogou_page_"][href*="&page="]',
            nextSelector: 'a.n[id^="sogou_next_"]'
        },
        so360: {
            host: ['www.so.com'],
            prevSelector: 'a.pn-prev',
            nextSelector: 'a.pn-next'
        }
    };

    // 获取当前搜索引擎
    function getCurrentEngine() {
        const hostname = window.location.hostname;
        for (let engine in engineConfig) {
            if (engineConfig[engine].host.includes(hostname)) {
                return engineConfig[engine];
            }
        }
        return null;
    }

    // 点击元素
    function clickElement(selector, textMatch = null) {
        const elements = document.querySelectorAll(selector);
        if (elements.length === 0) return false;

        let targetElement = elements[0];
        
        if (textMatch) {
            for (let element of elements) {
                if (element.textContent.includes(textMatch)) {
                    targetElement = element;
                    break;
                }
            }
        }

        if (targetElement) {
            targetElement.click();
            return true;
        }
        return false;
    }

    // 键盘事件处理
    function handleKeyPress(event) {
        // 如果用户正在输入框中,不处理翻页
        if (event.target.tagName === 'INPUT' || event.target.tagName === 'TEXTAREA') {
            return;
        }

        const engine = getCurrentEngine();
        if (!engine) return;

        // 左方向键:上一页
        if (event.keyCode === 37) {
            if (engine.prevText) {
                clickElement(engine.prevSelector, engine.prevText);
            } else {
                clickElement(engine.prevSelector);
            }
            event.preventDefault();
        }
        // 右方向键:下一页
        else if (event.keyCode === 39) {
            if (engine.nextText) {
                clickElement(engine.nextSelector, engine.nextText);
            } else {
                clickElement(engine.nextSelector);
            }
            event.preventDefault();
        }
    }

    // 添加键盘事件监听
    document.addEventListener('keydown', handleKeyPress);

    // 调试信息
    const engine = getCurrentEngine();
    if (engine) {
        console.log('搜索引擎键盘翻页助手已启用');
    }
})();