秉着自己动手,丰衣足食的精神,既然现在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.21
// @description  通过侧键触发按钮点击
// @author       dadamelon
// @match        https://bb.yuubari.cn/99/ #your-domian-to-FNOS
// @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';
            } else if (eventType === 'mouseup' && buttonState[button] === 'down') {
                // 记录按键被释放,并执行模拟点击
                buttonState[button] = 'up';
                
                let target;
                switch(button) {
                    case 3: // 后退键
                        target = document.querySelector(SELECTORS.back);
                        break;
                    case 4: // 前进键
                        target = document.querySelector(SELECTORS.forward);
                        break;
                }

                if (target) {
                    target.click();
                }
                
                // 重置状态,准备下一次按键
                setTimeout(() => {
                    buttonState[button] = null;
                }, 100);
            }
            
            // 防止其他可能的默认行为
            return false;
        }
    }
}

// 立即应用
disableBrowserBackForward();