― MozillaZine.jp フォーラムは Mozilla 製品に関する情報交換の場です ―



All times are UTC + 9 hours

新しいトピックを投稿する トピックへ返信する  [ 6 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2009年5月28日(木) 21:43 
オフライン

登録日時: 2007年1月14日(日) 14:24
記事: 138
お住まい: Osaka,Japan
【やりたいこと】
 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>


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2009年5月31日(日) 01:23 
オフライン
Moderator

登録日時: 2006年10月29日(日) 21:56
記事: 472
mitsugu さんが書きました:
 id が "contentsBox" の vbox のサイズは変わらないが、なぜか window のサイズが挿入件数に比例して大きくなっていく。

書かれている情報からだけでは window が大きくなっていくというのが再現できませんでした。
再現できるアドオンがあるのならば具体的に公開してみてはどうでしょうか。


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2009年5月31日(日) 22:26 
オフライン

登録日時: 2007年1月14日(日) 14:24
記事: 138
お住まい: Osaka,Japan
 やっつけかつ汚いコードで公開しました。Saving Tab という拡張がそれです。
http://myscript.zouri.jp/extension/index.htm
 現在は unneedtab.js というファイルの 46 行目で、risizeTo を使って無理矢理 window サイズを縮めています。


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2009年6月06日(土) 14:36 
オフライン
Moderator

登録日時: 2006年10月29日(日) 21:56
記事: 472
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;
等とする必要があります。


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2009年6月06日(土) 20:23 
オフライン

登録日時: 2007年1月14日(日) 14:24
記事: 138
お住まい: Osaka,Japan
あさん さんが書きました:
そのアドオンで意図に反していると思われているのは、おそらく <vbox width="384"> の高さの決定がその孫要素にまで影響されているので、その孫要素がたくさんあると vbox が大きくなってしまう、ということで、window 要素の決定前に vbox が大きいと、それに合わせて window 要素も大きくなる、というところでしょうか。
(決定時に一度決まるだけであって、「たび」ではない。)

 なるほど。私の意図に反してウィンドウのサイズが大きくなってゆく原理が理解できました。ありがとうございます。

あさん さんが書きました:
これ自体を直接回避するとすれば、挿入するのを window のサイズ決定後まで遅延させる、つまり
コード:
setTimeout(現状の init でしている処理, 0);
などで回避できると思います。

 自分でも試してみますが、CSS でサイズを指定してやることで、原理的に回避は可能でしょうか?

# テスト結果がはっきりしたら、またレポートします。
# それとハードコードの件は、あさんのおっしゃる通りなので修正しようと思います。
# 自分で見ていても汚いと思いますし、xml の考え方に Valid ではないとも考えます。
# また、今後のメンテナンスにも不便ですので。
# まずはお忙しい中、大きなヒントをいただきありがとうございました。


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2009年6月06日(土) 21:31 
オフライン

登録日時: 2007年1月14日(日) 14:24
記事: 138
お住まい: Osaka,Japan
 報告します。
 以下の要素に id を振り直し、それぞれの id に対応するセレクタに width、height を設定することで、単純に目的を達成することができました。
 あさんのアドバイスに深く感謝いたします。

コード:
id を contentsBox に設定
<vbox width="384">


コード:
id を contents に設定
<vbox id="contentsBox" minheight="256" maxheight="256">


通報する
ページトップ
 プロフィール  
引用付きで返信する  
期間内表示:  ソート  
新しいトピックを投稿する トピックへ返信する  [ 6 件の記事 ] 

All times are UTC + 9 hours


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[23人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by MozillaZine.jp® Forum Software © phpBB Group , Almsamim WYSIWYG
Japanese translation principally by ocean