TamperMonkey:无法读取 null

问题描述

这里是 JavaScript 的新手,我在浏览时使用游戏手柄(使用游戏手柄 API 和 TamperMonkey),我在模拟点击屏幕上的某个 (x,y) 坐标时遇到了麻烦。它报告“无法读取 null 的属性dispatchEvent’”,即使当我在单击函数中控制台记录我的元素时,它也会返回 null。任何人都可以帮助澄清可能存在错误的地方吗?

(function() {
    'use strict';

    const rAF = window.mozRequestAnimationFrame || window.requestAnimationFrame;

    window.addEventListener("gamepadconnected",(event) => {
        console.log("A gamepad connected:");
        console.log(event.gamepad);
    });

    window.addEventListener("gamepaddisconnected",(event) => {
        console.log("A gamepad disconnected:");
        console.log(event.gamepad);
    });



    window.addEventListener('gamepadconnected',function(e) {
        updateLoop();
    })

    function updateLoop() {
        if(navigator.getGamepads) {
            var gp = navigator.getGamepads()[0];
          }

        const xBoxButtonB = gp.buttons[1];
        const xBoxButtonA = gp.buttons[0];

        
        if (xBoxButtonA.pressed) {
            console.log('a pressed');
            click(1200,500);

        }

        if (xBoxButtonB.pressed) {
            console.log('b pressed')
            click(700,500);
        }

        setTimeout(function () {
            rAF(updateLoop);
        },150);
    }

    
    function click(x,y){
        var ev = new MouseEvent('click',{
                'view': window,'bubbles': true,'cancelable': true,'screenX': x,'screenY': y
            });

            var el = document.elementFromPoint(x,y);
            console.log(el); //print element to console
            el.dispatchEvent(ev);
    }

})();

解决方法

e1null,这意味着传递给 elementFromPoint() 的坐标处没有元素。请注意,坐标相对于当前 viewport 的左上角。

尝试使用 click(0,0),它应该可以工作,因为 0,0 保证在视口内。