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 に答える