为什么 noautohide 在 XUL 面板中不起作用?

发布于 2024-12-17 19:50:21 字数 498 浏览 1 评论 0原文

我正在开发一个 Firefox 扩展,试图让面板覆盖浏览器元素。这是我的 javascript 代码:

var panel = oldTabBrowser.contentDocument.createElement('panel');
panel.setAttribute('noautohide','true');
var label = oldTabBrowser.contentDocument.createElement('label');
label.setAttribute('value','my text');
panel.appendChild(label);
elem.appendChild(panel);
panel.openPopup(elem, "overlap",0,0);
alert(panel.getAttribute('noautohide'));

noautohide 属性设置得很好,面板按预期显示,但单击任意位置时,面板就会消失。我缺少什么?

I'm developing a Firefox extension, trying to get a panel to overlay a browser element. Here is my javascript code:

var panel = oldTabBrowser.contentDocument.createElement('panel');
panel.setAttribute('noautohide','true');
var label = oldTabBrowser.contentDocument.createElement('label');
label.setAttribute('value','my text');
panel.appendChild(label);
elem.appendChild(panel);
panel.openPopup(elem, "overlap",0,0);
alert(panel.getAttribute('noautohide'));

The noautohide attribute is set fine and the panel appears as expected, but on clicking anywhere, the panel disappears. What am I missing?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

故笙诉离歌 2024-12-24 19:50:21

我强烈怀疑 noautohide 属性无法正常工作。至少对于 来说,结果不是我所期望的。不过,您可以使用 popuphiding< 来确保您的面板不会过早关闭/code> 事件

var canClose = false;
panel.addEventListener("popuphiding", function(event)
{
  if (!canClose)
  {
    // Too early to close, prevent it
    event.preventDefault();
  }
}, false);
panel.openPopup(elem, "overlap",0,0);

...

// Now it is ok to close
canClose = true;
panel.hidePopup();

I have a strong suspicion that noautohide attribute doesn't work correctly. At least for <xul:tooltip> the result isn't the one I expected. You can however make sure that your panel doesn't close prematurely using popuphiding event:

var canClose = false;
panel.addEventListener("popuphiding", function(event)
{
  if (!canClose)
  {
    // Too early to close, prevent it
    event.preventDefault();
  }
}, false);
panel.openPopup(elem, "overlap",0,0);

...

// Now it is ok to close
canClose = true;
panel.hidePopup();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文