Altium viewer - disable number hotkeys

Suppress some number keys in online altium viewer, to prevent accidentally switching between e.g. schematic and PCB views.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// ==UserScript==
// @name         Altium viewer - disable number hotkeys
// @namespace    http://www.stderr.nl/
// @version      2024-09-03
// @description  Suppress some number keys in online altium viewer, to prevent accidentally switching between e.g. schematic and PCB views.
// @author       Matthijs Kooijman <[email protected]>
// @license      The MIT license; http://opensource.org/licenses/MIT
// @match        https://cdn.365.altium.com/microfrontends/viewer/*
// @grant        none
// @run-at       document-start
// ==/UserScript==

// Number keys can be used to switch between schematic, PCB and 3D views. When running Firefox
// on Gnome, switching between virtual desktops with super-1/2/3 seems to deliver the keyup event
// for that to the website, causing altium viewer to switch modes. This might be a gnome-shell bug,
// but this script eats up those keyup events to work around this.

// This script matches the URL of the viewer iframe in the altium webpage, since that is where the key events
// are handled (and if the iframe is focused, the outer document never sees the events).

// Approach is based on https://stackoverflow.com/a/19785922/740048

(function() {
    'use strict';
    var keys = ['1', '2', '3'];
    document.addEventListener('keyup', function(e) {
        // console.log("KEY EVT", e);
        if (keys.indexOf(e.key) != -1) {
            console.log("CANCELING EVT", e);
            e.cancelBubble = true;
            e.stopImmediatePropagation();
        }
        return false;
    }, {capture: true});
})();