6/14の続き。width、heightに100%を放り込むにはsetAttribute()というものを使えばよろしいらしい。というわけで、setAttribute()を使って書き換えると次のようになります。
var doc_width = window.innerWidth - 30; var doc_height = window.innerHeight - 132; var pic_width = getBrowser().contentDocument.images[0].width; var pic_height = getBrowser().contentDocument.images[0].height; if (doc_width / doc_height < pic_width / pic_height) { getBrowser().contentDocument.images[0].setAttribute('width', '100%'); } else { getBrowser().contentDocument.images[0].setAttribute('height', '99%'); }
[picture_resize JavaScript]
しかし、ドキュメント部分の大きさを取得する方法がわからんのでやっぱり環境依存。window.innerWidthから引いている30はサイドバーのトグル+bodyのマージン分だと思われます。サイドバーを開きっぱなしにしている場合はもっと大きくなるでしょう。逆にサイドバーを非表示にしている場合は小さくなるはず。window.innerHeightから引いている132はタイトルバー+ナビゲーションツールバー+パーソナルツールバー+タブ+ステイタスバーの分。なぜかこちらはbodyのマージン分は入ってない模様。んでもって、widthは100%で問題ないのにheightの場合は100%ではスクロールバーが出てしまうので99%に設定。画像サイズをピクセル数ではなく表示領域に対して100%(あるいは99%)で設定しているので横長な画像の場合はサイドバーの開閉の際に自動的に画像も伸縮するようになっています。……が、縦長な画像の場合は横方向について設定していないのでサイドバーを開閉しても画像のサイズは変わりません。うむう……まあ別に問題ないか。