Javascript 在SDK中首次右键单击获取鼠标坐标

Javascript 在SDK中首次右键单击获取鼠标坐标,javascript,firefox-addon,firefox-addon-sdk,Javascript,Firefox Addon,Firefox Addon Sdk,对于SDK插件,我尝试右键单击检测最近的页面锚(as) 因为JavaScript显然无法在不首先创建鼠标事件侦听器的情况下查询鼠标坐标,而且我不想让昂贵的鼠标覆盖侦听器一直在每个页面上运行!(投票重建鼠标监听器很难看,也不完全准确),我希望能从点击事件中获得鼠标坐标。不幸的是,self.on('click'会触发: 此事件没有可从中获取鼠标坐标的事件对象 添加一个普通的窗口。addEventListener('单击',…listener实际上不会在SDK内容脚本中由于某种原因而在第一个菜单选择中

对于SDK插件,我尝试右键单击检测最近的页面锚(as)

因为JavaScript显然无法在不首先创建鼠标事件侦听器的情况下查询鼠标坐标,而且我不想让昂贵的鼠标覆盖侦听器一直在每个页面上运行!(投票重建鼠标监听器很难看,也不完全准确),我希望能从点击事件中获得鼠标坐标。不幸的是,
self.on('click'
会触发:

  • 此事件没有可从中获取鼠标坐标的事件对象
  • 添加一个普通的
    窗口。addEventListener('单击',…
    listener实际上不会在SDK内容脚本中由于某种原因而在第一个菜单选择中被触发(但是它会随后触发)
  • 这是我的解决方法,但我想使用当前的精确坐标,而不是节点的坐标:

    var x, y;
    window.addEventListener('click', function (e) {
        if (e.button === 2) {
            x = e.clientX;
            y = e.clientY;
        }
    }, true);
    
    self.on('click', function (node) {
        if (!x) { // Since this is not showing the first time, we fire on the node (which is specifically an element, not a text node), though we really want the real clientX and clientY where the mouse is, not this simulation based on where the element is
            node.dispatchEvent(new MouseEvent('click', {
                button: 2
            }));
        }
        // Use document.caretPositionFromPoint with x and y to determine location of text
    

    有没有其他方法可以获得实际的鼠标坐标?

    您实际上可以在没有鼠标侦听器的情况下查询鼠标坐标

    本页有一系列示例:


    它必须基于每个操作系统进行,因为它使用JS Ctypes。如果您担心性能,请不要担心。您可以通过
    ChromeWorker
    s

    异步使用代码。我无法真正复制这一点。
    addEventListener(“单击”,…)
    总是在
    self.on(“单击”,…)之前启动
    当我尝试时。你能详细说明一下吗?对我来说,问题只发生在第一次尝试加载页面时。重新加载页面会导致同样的情况再次发生:第一次尝试无法正确检测(由于缺少单击事件,通过
    if(!x)
    解决方法检测到的值过高),但随后的上下文菜单调用确实可以正常工作。使用FF 31.0对SDK 1.16进行测试。您正在使用来自的代码进行测试,对吗?对…在当前主分支中…有时它会转到anchor 2.3.2,但这仍然太高--如果在第2.3.3节中单击,它应该转到2.3.3,当我添加日志时,
    window.addEventListener(‘单击’
    code直到第一次尝试之后……很有趣——如果没有操作系统依赖,那就太好了,谢谢!:O@nmaier被一个新用户搞定了!!道具人,可能是你第一次也是最后一次tho:PFTR,虽然这个解决方案确实很好地获得坐标,但在我的情况下,我需要坐标在用户单击下一步以获取菜单时,而不是在用户单击特定项目时(即加载项脚本可以得到通知的时间)。我通过将pageMod关联到cm(根据)解决了这个问题,pageMod没有遇到
    单击
    事件的问题。可能是“上下文”中的
    后消息
    事件本来可以在正确的时间获得坐标,但我需要一种方式来与内容进行通信(最好不需要特定于操作系统的代码)。