微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

TamperMonkey:无法读取 null

如何解决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 保证在视口内。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。