我正在为 FireFox 开发一个扩展。我使用包含XULdeck
元素的XULbrowser
元素。不幸的是,只要浏览器中显示的页面具有 HTMLtitle
属性,该属性的值title
就不会显示为工具提示。
如何让工具提示正确显示?
我正在为 FireFox 开发一个扩展。我使用包含XULdeck
元素的XULbrowser
元素。不幸的是,只要浏览器中显示的页面具有 HTMLtitle
属性,该属性的值title
就不会显示为工具提示。
如何让工具提示正确显示?
没有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;
}
我为那些感兴趣的人找到了解决方案,它是通过向具有以下值的 XUL 浏览器元素添加一个工具提示属性:
tooltip="aHTMLTooltip"
或者使用 javascript 以编程方式添加它,如下所示:
browser.setAttribute('tooltip','aHTMLTooltip');
更多细节检查:https ://bugzilla.mozilla.org/show_bug.cgi?id=451792#c1
工作示例:
<?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>