我正在开发FireFox的扩展程序。我使用包含XUL deck
element的XUL browser
element。不幸的是,只要浏览器中显示的页面具有HTML title
属性,此title
属性的值就不会显示为工具提示。
如何才能正确显示工具提示?
答案 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>