如何在火狐附加组件SDK中将面板位置更改为鼠标位置

How to change the panel position to mouse position in Firefox Add-on SDK

本文关键字:位置 鼠标 火狐 SDK 组件      更新时间:2023-09-26

我希望在鼠标在屏幕上的位置显示一个面板。

Firefox SDK 文档不是很详细,我在了解如何更改面板位置时遇到了一些问题。

可悲的是,你不能。如果我查看源代码,附加 SDK 总是在浏览器窗口中间显示面板。只有一个未记录的选项可以将面板锚定在某些网页中的节点上,但这显然是有原因的(SDK 扩展通常无法掌握此类节点)。即使该选项可用,也无法解决您的问题。我想"最简单的"解决方案是采用packages/addon-kit/lib/panel.js并在扩展中使用修改后的版本,其中方法show()可以获取屏幕坐标(此方法底部的openPopup()调用中的参数xy是屏幕坐标)。

我试图在导航栏中创建一个按钮,然后通过它显示一个面板,而不是使用小部件来显示一个按钮,因为它与插件工具栏相关联。

为了在导航栏中放置一个按钮,我在这里使用了代码:

http://kendsnyder.com/posts/firefox-extensions-add-button-to-nav-bar

在他的代码中,您会注意到有一点看起来像这样:

    btn.addEventListener('click', function() {
    // do stuff, for example with tabs or pageMod
}, false)

正如 Wladimir 提到的,您必须将面板锚定到一个元素,因此在单击事件中我添加了以下内容:

panel.show(utils.getMostRecentBrowserWindow().document.getElementById("myButton"));

我声明了这样的实用程序:

var utils = require("sdk/window/utils");

您实际上可以将面板锚定到浏览器中的任何元素。例如,可以将其定位到导航栏:

 panel.show(utils.getMostRecentBrowserWindow().document.getElementById("nav-bar"));

或锚定到状态栏,如下所示:

panel.show(utils.getMostRecentBrowserWindow().document.getElementById("statusbar-display"));

希望这对某人有所帮助。干杯!