1

我正在为 FireFox 开发一个扩展。我使用包含XULdeck元素的XULbrowser元素。不幸的是,只要浏览器中显示的页面具有 HTMLtitle属性,该属性的值title就不会显示为工具提示。

如何让工具提示正确显示?

4

3 回答 3

1

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

<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;
}
于 2012-05-21T19:33:11.943 回答
1

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

更多细节检查:https ://bugzilla.mozilla.org/show_bug.cgi?id=451792#c1

于 2012-05-22T08:52:36.817 回答
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>
于 2014-10-19T12:33:42.207 回答