收起左侧

鼠标侧键返回登录页修复

3
回复
193
查看
[ 复制链接 ]

5

主题

20

回帖

0

牛值

江湖小虾

2025-5-20 10:31:55 显示全部楼层 阅读模式

秉着自己动手,丰衣足食的精神,既然现在FNOS不支持鼠标侧键,支持也遥遥无期,所以自己写了个油猴脚本,拦截浏览器默认行为,绑定飞牛文件管理器的前进后退按钮,支持在文件管理器前进后退。

使用前请注意:

1.需安装篡改猴插件;

2.需修改@match参数为自己的飞牛地址,例如 *//*.fnos.com/* # 如果有端口号也要加上

3.鼠标侧键的 event.button 通常取值:3 表示后退键,4 表示前进键(不同设备/浏览器可能有差异,若无效需自行调整)。如果鼠标键未生效,可能是 event.button 编号与你的设备不匹配,可通过控制台打印 event.button 确认实际值(在页面按 F12 打开开发者工具,输入 document.addEventListener('mousedown', e => console.log('按钮编号:', e.button)) 后点击侧键查看)

4.本脚本基于Microsoft Edge浏览器和飞牛私有云OS 0.9.2,其他版本是否可用请以实际为准。

// ==UserScript==
// @name         fnOS鼠标侧键优化版
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  通过侧键触发按钮点击
// @author       dadamelon
// @match        *://your-domian/*
// @grant        none
// ==/UserScript==

function disableBrowserBackForward() {
    const SELECTORS = {
        forward: 'div[aria-label="导航"] button:nth-of-type(2)',
        back: 'div[aria-label="导航"] button:first-of-type'
    };

    // 跟踪鼠标侧键状态:记录上一次事件的类型和按钮
    let buttonState = {
        3: null, // 后退键状态(null/down/up)
        4: null  // 前进键状态
    };

    // 同时监听 mousedown 和 mouseup 事件
    document.addEventListener('mousedown', handleMouseButton, { passive: false });
    document.addEventListener('mouseup', handleMouseButton, { passive: false });

    function handleMouseButton(event) {
        // 鼠标侧键的 button 值通常为 3(后退)和 4(前进)
        if (event.button === 3 || event.button === 4) {
            const button = event.button;
            const eventType = event.type;

            // 阻止默认行为
            event.preventDefault();
            event.stopPropagation();

            // 状态管理:只在按键状态变化时执行操作
            if (eventType === 'mousedown' && buttonState[button] !== 'down') {
                // 记录按键被按下
                buttonState[button] = 'down';
                console.log(`鼠标侧键 ${button === 3 ? '后退' : '前进'} 被按下`);
            } else if (eventType === 'mouseup' && buttonState[button] === 'down') {
                // 记录按键被释放,并执行模拟点击
                buttonState[button] = 'up';
                console.log(`鼠标侧键 ${button === 3 ? '后退' : '前进'} 被释放,执行模拟点击`);

                let target;
                switch(button) {
                    case 3: // 后退键
                        target = document.querySelector(SELECTORS.back);
                        break;
                    case 4: // 前进键
                        target = document.querySelector(SELECTORS.forward);
                        break;
                }

                if (target) {
                    target.click();
                    console.log(`成功模拟点击${button === 3 ? '后退' : '前进'}按钮`);
                }

                // 重置状态,准备下一次按键
                setTimeout(() => {
                    buttonState[button] = null;
                }, 100);
            }

            // 防止其他可能的默认行为
            return false;
        }
    }
}

// 立即应用
disableBrowserBackForward();
收藏
送赞
分享

0

主题

3

回帖

0

牛值

江湖小虾

2025-5-20 13:43:44 显示全部楼层
大佬**,确实挺有帮助
不好意思,之前的代码会监听mousedown和mouseup并分别执行两次前进火后退,该问题已经修复,可以使用下边的。  详情 回复
2025-5-20 13:45

5

主题

20

回帖

0

牛值

江湖小虾

2025-5-20 13:44:26 楼主 显示全部楼层

之前的代码在执行后,会监听mousedown和mouseup并分别执行两次前进火后退,该问题已经修复,可以使用下边的。

// ==UserScript==
// @name         fnOS鼠标侧键优化版
// @namespace    http://tampermonkey.net/
// @version      0.2
// @description  通过侧键触发按钮点击
// @author       dadamelon
// @match        *://your-domian/*
// @grant        none
// ==/UserScript==

function disableBrowserBackForward() {
    const SELECTORS = {
        forward: 'div[aria-label="导航"] button:nth-of-type(2)',
        back: 'div[aria-label="导航"] button:first-of-type'
    };

    // 跟踪鼠标侧键状态:记录上一次事件的类型和按钮
    let buttonState = {
        3: null, // 后退键状态(null/down/up)
        4: null  // 前进键状态
    };

    // 同时监听 mousedown 和 mouseup 事件
    document.addEventListener('mousedown', handleMouseButton, { passive: false });
    document.addEventListener('mouseup', handleMouseButton, { passive: false });

    function handleMouseButton(event) {
        // 鼠标侧键的 button 值通常为 3(后退)和 4(前进)
        if (event.button === 3 || event.button === 4) {
            const button = event.button;
            const eventType = event.type;

            // 阻止默认行为
            event.preventDefault();
            event.stopPropagation();

            // 状态管理:只在按键状态变化时执行操作
            if (eventType === 'mousedown' && buttonState[button] !== 'down') {
                // 记录按键被按下
                buttonState[button] = 'down';
                console.log(`鼠标侧键 ${button === 3 ? '后退' : '前进'} 被按下`);
            } else if (eventType === 'mouseup' && buttonState[button] === 'down') {
                // 记录按键被释放,并执行模拟点击
                buttonState[button] = 'up';
                console.log(`鼠标侧键 ${button === 3 ? '后退' : '前进'} 被释放,执行模拟点击`);

                let target;
                switch(button) {
                    case 3: // 后退键
                        target = document.querySelector(SELECTORS.back);
                        break;
                    case 4: // 前进键
                        target = document.querySelector(SELECTORS.forward);
                        break;
                }

                if (target) {
                    target.click();
                    console.log(`成功模拟点击${button === 3 ? '后退' : '前进'}按钮`);
                }

                // 重置状态,准备下一次按键
                setTimeout(() => {
                    buttonState[button] = null;
                }, 100);
            }

            // 防止其他可能的默认行为
            return false;
        }
    }
}

// 立即应用
disableBrowserBackForward();

5

主题

20

回帖

0

牛值

江湖小虾

2025-5-20 13:45:00 楼主 显示全部楼层
刘冲x 发表于 2025-5-20 13:43
大佬**,确实挺有帮助

不好意思,之前的代码会监听mousedown和mouseup并分别执行两次前进火后退,该问题已经修复,可以使用下边的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则