window.sizeToContent()がLinux版Firefoxで動作しない条件について
- 関連記事:
- window.sizeToContent()がおかしい(当ブログ内)
- ConQuery 1.7.3 改造版その3β3(Shadow912's Mozilla/Firefox 日本語版拡張置き場)
その後、window.sizeToContent()を1回呼び出しただけでは「検索の設定」ダイアログが適切にリサイズされず高さ1pxになる件について調べた所、未だ原因は掴めていないが、この現象が発生する条件(=有力な回避方法)を見つけた。
結論から書くと、dialog要素(id=cq-list)にwidth属性が設定されている場合に、ウィンドウの幅がその値に固定され、一回目のsizeToContent()でリサイズされなくなる。(このときheight属性が設定されていないとウィンドウの高さは1pxになり、指定されているとその高さ+1pxになる。つまり高さもリサイズされない。)
ただし、width(height)がmaxwidth(maxheight)より大きかったり、minwidth(minheight)より小さいなど、実現不可能な場合は、sizeToContent()が一回で適切にリサイズしてくれる。(widthとheightのいずれか一方が実現不可能ならOK。)
また、width(height)属性が、javascriptで設定されていても、xulで設定されていても動作は同じ様だ。
ConQueryではchrome://conquery/content/list.jsの以下の部分で、「extensions.conquery.Main.QueryConfigWidth」に設定された値を、cq-listのwidth属性に設定している。
document.getElementById("cq-list").setAttribute('width', cqrEnv.QueryConfigWidth);
この部分をコメントアウトするか、'width'を'minwidth'に変えてやればLinux版でもsizeToContent()が一回で済む。*1
特にminwidthを使う方法は、Windowsでの動作は変わらず(追記参照)、実装の元々の意図を実現する方法として好ましいのではないか。
ちなみにLinuxでは、sizeToContent()を二回呼び出す方法と、widthを削除もしくはminwidthに変える方法では動作が変わる。
例えば以下のようなlabelがやや長い検索プラグインの場合
<?xml version="1.0" encoding="UTF-8"?> <ConQueryPlugin xmlns="http://geek.net.ru/en/opensource/conquery/"> <ShortName>いろは歌</ShortName> <Description>やや長い</Description> <InputEncoding>UTF-8</InputEncoding> <Url type="text/html" method="GET" template="http://www.example.com"> <Param name="url" value="{prompt}" label="いろはにほへと ちりぬるを わかよたれそ つねならむ"/> <Param name="url" value="{searchTerms}" label="デフォルト"/> </Url> </ConQueryPlugin>
sizeToContent()二回では、グリッドの右側の列がつぶれてしまうが、widthを削除もしくはminwidthに変える方法ではグリッドの右側も長さをたもっている。
追記:
Windowsの場合も、width指定はグリッドの右側がつぶれてしまうが、widthを削除もしくはminwidthに変える方法では、グリッドの右側が長さを保っている。やはりminwidth指定が良さそう。