私は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>