MozillaZine.jp フォーラム https://forums.mozillazine.jp/ |
|
XUL window 要素のサイズ固定 https://forums.mozillazine.jp/viewtopic.php?f=26&t=8597 |
ページ 1 / 1 |
作成者: | mitsugu [ 2009年5月28日(木) 21:43 ] |
記事の件名: | XUL window 要素のサイズ固定 |
【やりたいこと】 XUL の window 要素の子要素に、DOM を利用してノードを追加していっても、勝ってに window 要素が大きくならないようにしたい。 【環境】 Ubuntu 9.04 Jaunty Jackalope Mozilla/5.0 (X11; U; Linux i686; ja; rv:1.9.1b4) Gecko/20090423 Firefox/3.5b4 【XUL コード】 コード: <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="chrome://global/skin/" type="text/css"?> <?xml-stylesheet type="text/css" href="chrome://unneedtab/skin/unneedtab.css"?> <!DOCTYPE window> <window windowtype="xulmine" id='mainwindow' title='hoge' xmlns='http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul' align="start" onload="unneedtab.init();" maxheight="320"> <script src="chrome://global/content/nsDragAndDrop.js"/> <script src="chrome://global/content/nsTransferable.js"/> <script src="chrome://global/content/nsJSSupportsUtils.js"/> <script src="chrome://global/content/nsJSComponentManager.js"/> <script type="application/x-javascript" src="chrome://unneedtab/content/unneedtab.js"/> <vbox width="384"> <vbox id="contentsBox" minheight="256" maxheight="256"> </vbox> <hbox id="buttons"> <spacer flex="1"/> <button label="close" oncommand="window.close();"/> <spacer flex="1"/> <button label="remove" oncommand="unneedtab.removePage();"/> <spacer flex="1"/> </hbox> </vbox> </window> chrome 内の以下のファイルから hbox を取りだし、id が "contentsBox" の vbox に DOM を利用して動的に挿入している。 id が "contentsBox" の vbox のサイズは変わらないが、なぜか window のサイズが挿入件数に比例して大きくなっていく。 ユーザのオペレーションでサイズが変化するのは当然問題ないが、コードで自動的にノードが挿入されるたびに window 要素のサイズが肥大化するのを防ぎたい。 コード: <?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?> <?xml-stylesheet type="text/css" href="chrome://unneedtab/skin/unneedtab.css"?> <hbox xmlns='http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul' class="item"> <vbox> <spacer flex="1"/> <description value="" class="title" href="" onclick="unneedtab.dispContent(this)"/> <spacer flex="1"/> </vbox> <checkbox/> </hbox> |
作成者: | あ [ 2009年5月31日(日) 01:23 ] |
記事の件名: | Re: XUL window 要素のサイズ固定 |
mitsugu さんが書きました: id が "contentsBox" の vbox のサイズは変わらないが、なぜか window のサイズが挿入件数に比例して大きくなっていく。
書かれている情報からだけでは window が大きくなっていくというのが再現できませんでした。 再現できるアドオンがあるのならば具体的に公開してみてはどうでしょうか。 |
作成者: | mitsugu [ 2009年5月31日(日) 22:26 ] |
記事の件名: | Re: XUL window 要素のサイズ固定 |
やっつけかつ汚いコードで公開しました。Saving Tab という拡張がそれです。 http://myscript.zouri.jp/extension/index.htm 現在は unneedtab.js というファイルの 46 行目で、risizeTo を使って無理矢理 window サイズを縮めています。 |
作成者: | あ [ 2009年6月06日(土) 14:36 ] |
記事の件名: | Re: XUL window 要素のサイズ固定 |
mitsugu さんが書きました: コードで自動的にノードが挿入されるたびに window 要素のサイズが肥大化するのを防ぎたい。 アドオンを見てみましたが、「ノードが挿入されるたびに window 要素のサイズが肥大化する」は再現できませんでした。 そのアドオンで意図に反していると思われているのは、おそらく <vbox width="384"> の高さの決定がその孫要素にまで影響されているので、その孫要素がたくさんあると vbox が大きくなってしまう、ということで、window 要素の決定前に vbox が大きいと、それに合わせて window 要素も大きくなる、というところでしょうか。 (決定時に一度決まるだけであって、「たび」ではない。) これ自体を直接回避するとすれば、挿入するのを window のサイズ決定後まで遅延させる、つまり コード: setTimeout(現状の init でしている処理, 0); などで回避できると思います。ただし、サイズを XUL でハードコードしているのがそもそも良くないです。 そうではなく、スタイルシート中に コード: #contentsBox { 等と書いてはどうでしょうか。width: 256px; height: 256px; } これだけで、上記の問題は回避できているように見えます。 さらに言うと、サイズの単位は px よりも em の方が良いと思います。 mitsugu さんが書きました: 現在は unneedtab.js というファイルの 46 行目で、risizeTo を使って無理矢理 window サイズを縮めています。 これは不要になるはずなのでほぼ余談ですが、window のサイズは、window 要素のサイズではなくてウィンドウのサイズなので気をつけてください。 コード: window.resizeTo(395,320); とするとウィンドウのサイズが 395x320 となりますが、Windows や Mac ではタイトルバー等もウィンドウの一部なので、window 要素のサイズとしてはそれらが差し引かれて少し小さいサイズになります。同じサイズだと思っていると、中身が収まりきらなくなってしまいます。 ウィンドウの大きさではなく、ウィンドウの中身の大きさを指定したいのであれば コード: window.innerWidth = 395; 等とする必要があります。
window.innerHeight = 320; |
作成者: | mitsugu [ 2009年6月06日(土) 20:23 ] |
記事の件名: | Re: XUL window 要素のサイズ固定 |
あさん さんが書きました: そのアドオンで意図に反していると思われているのは、おそらく <vbox width="384"> の高さの決定がその孫要素にまで影響されているので、その孫要素がたくさんあると vbox が大きくなってしまう、ということで、window 要素の決定前に vbox が大きいと、それに合わせて window 要素も大きくなる、というところでしょうか。 (決定時に一度決まるだけであって、「たび」ではない。) なるほど。私の意図に反してウィンドウのサイズが大きくなってゆく原理が理解できました。ありがとうございます。 あさん さんが書きました: これ自体を直接回避するとすれば、挿入するのを window のサイズ決定後まで遅延させる、つまり
コード: setTimeout(現状の init でしている処理, 0); などで回避できると思います。自分でも試してみますが、CSS でサイズを指定してやることで、原理的に回避は可能でしょうか? # テスト結果がはっきりしたら、またレポートします。 # それとハードコードの件は、あさんのおっしゃる通りなので修正しようと思います。 # 自分で見ていても汚いと思いますし、xml の考え方に Valid ではないとも考えます。 # また、今後のメンテナンスにも不便ですので。 # まずはお忙しい中、大きなヒントをいただきありがとうございました。 |
作成者: | mitsugu [ 2009年6月06日(土) 21:31 ] |
記事の件名: | Re: XUL window 要素のサイズ固定 |
報告します。 以下の要素に id を振り直し、それぞれの id に対応するセレクタに width、height を設定することで、単純に目的を達成することができました。 あさんのアドバイスに深く感謝いたします。 コード: id を contentsBox に設定 <vbox width="384"> コード: id を contents に設定
<vbox id="contentsBox" minheight="256" maxheight="256"> |
ページ 1 / 1 | All times are UTC + 9 hours |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |