XUL浏览器内容中的工具提示(标题)不起作用?

时间:2012-05-21 11:46:27

标签: firefox-addon tooltip xul

我正在开发FireFox的扩展程序。我使用包含XUL deck elementXUL browser element。不幸的是,只要浏览器中显示的页面具有HTML title属性,此title属性的值就不会显示为工具提示。

如何才能正确显示工具提示?

3 个答案:

答案 0 :(得分:1)

没有在工具提示中自动显示title属性的机制 - 浏览器窗口具有特殊代码,您需要在扩展中复制此代码。这意味着您需要定义<tooltip> element,例如:

<popupset>
  <tooltip id="browserTooltip" onpopupshowing="return fillTooltip(this);"/>
</popupset>

您应该在<browser>元素中使用此工具提示,如下所示:

<browser tooltip="browserTooltip"/>

你应该创建一个fillTooltip()函数,只要你的工具提示出现就会被调用。它需要查看鼠标指针悬停的HTML元素,检查其title属性并将属性的值放入工具提示中。在Firefox中执行此作业的函数是FillInHTMLTooltip(),但您可能希望使用更简单的变体(未经测试的代码):

function fillTooltip(tooltip)
{
  // Walk up the DOM hierarchy until we find something with a title attribute 
  var node = document.tooltipNode;
  while (node && !node.hasAttribute("title"))
    node = node.parentNode;

  // Don't show tooltip if we didn't find anything
  if (!node)
    return false;

  // Fill in tooltip text and show it
  tooltip.setAttribute("label", node.getAttribute("title"));
  return true;
}

答案 1 :(得分:1)

我为那些感兴趣的人找到了解决方案,它是通过向XUL浏览器元素添加具有以下值的tooltip属性:
        tooltip="aHTMLTooltip"
或者使用这样的javascript以编程方式添加它:
        browser.setAttribute('tooltip','aHTMLTooltip');

有关详情,请查看:https://bugzilla.mozilla.org/show_bug.cgi?id=451792#c1

答案 2 :(得分:0)

工作示例:

<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
<window id="mainWindow" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" title="NanoFL" width="800" height="600" persist="screenX screenY width height sizemode">
<script>
    <![CDATA[

    function fillTooltip(tooltip)
    {
        var nodes = document.getElementById("browser").contentWindow.document.querySelectorAll(":hover");
        for (var i=nodes.length-1; i>=0; i--)
        {
            if (nodes[i].hasAttribute("title"))
            {
                tooltip.setAttribute("label", nodes[i].getAttribute("title"));
                return true;
            }
        }
        return false;
    }

    ]]>
</script>
<browser id="browser" src="chrome://nanofl/content/index.html" flex="1" disablehistory="true" tooltip="browserTooltip" />
<tooltip id="browserTooltip" onpopupshowing="return fillTooltip(this)"/>
</window>