タブを子ウィンドウ表示した時に更新するとページが収まりきれないという話について対処法をいくつか考えてみた

現象について

ネタ元はSleipnir/Grani 初心者質問スレ Part24 >>11より

「重ねて表示」でウインドウを小窓化してから更新ボタンを押すと表示がおかしくなります。

どうもフルウインドウ時の画面が表示されてしまうようで、
小窓に画面が写りきりません。どうすればいいでしょうか。
バージョンはSleipnir2.9.6です。


どういうことか画像であらわすと・・・
「ウィンドウバー」などから「重ねて表示」を選択する。*1

すると、タブが子ウィンドウ化されカスケード表示*2される

この状態で子ウィンドウを更新すると最下段部が表示されないという感じですね。*3

↓↓




で、いくつか策を考えてみました。

1.子ウィンドウを一旦最小化して、復元する

文字通り子ウィンドウを最小化→復元を行うと描画が戻るようです。

メリット
特にスクリプトなどを用意する必要が無い。
デメリット
マウスカーソルの移動が面倒。

※最小化→復元を自動化しようとスクリプト書こうとしたら挫折したw

2.SuperDragShowSuperViewアクションを利用する。

SuperDrag Extension
以前書いた現在開いているページをSuperView化するスクリプトを利用すると良いでしょう。

メリット
特筆すべき点はなし。
デメリット
仕様上1ページ分しかSuperView化できないので、用法によっては使えない。

※更新はコンテキストメニューの「最新の情報に更新」から。

3.ある程度の高さを持った空白のDIVタグをページの下に挿入する。

最下段の部分までスクロールできないのなら最下段を伸ばしてスクロールできるようにすればいいじゃない的発想。
例では500px分下側に足されます。*4

メリット
場合によっては更新と挿入がワンアクションで可能。
デメリット
JavaScript切ってたりすると動かない場合がある。*5
デメリット
フレームページなどではBodyタグが無いので動かない。
3.1.Bookmarkletを使う。
javascript:(function(){var%20div=document.createElement("div");div.style.height="500px";document.body.appendChild(div);})()

※ページを更新したあとに発動。

3.2.UAスクリプトを使う。

UserAction Extensionが必要です。
ファイル名例:InsertEmptyDiv.js

(function() {
var div = document.createElement("div");
div.style.height = "500px";
document.body.appendChild(div);
})()

※ページを更新したあとに発動。

3.3.さえ(仮称) +UAスクリプトを使う。

更新+挿入のワンアクション化です。
UserAction Extensionに加えさえ(仮称)も必要です。
UAスクリプトに関しては上述の通りにしてアクションを使用可能にしておいてください。
さえ(仮称)の表示名、アクション名は適当に。
コード:

SuperRefresh
InsertEmptyDiv

※コード内の"InsertEmptyDiv"はUAアクション名(=ファイル名)ですので、違う名前にした場合は適宜変更してください。

*1:アクション名で言えば「CascadeWindow」

*2:参考:RBB TODAY (ブロードバンド辞典)

*3:何度か試してみた感じ、必ず再現するというわけでも無いみたいだけど

*4:Win7x64+IE8+Sleipnir2.9.6で動作確認

*5:Bookmarkletは動きません。