「タブを隠す」メニューを追加するuserChrome.jsスクリプト
他人に見られたくないサイトを見ているようなときに使えるかも?
隠されたタブは、タブバーからは見えなくなるので、タブ一覧のメニューから選択するようにして下さい。 また、隠されたタブを選択している状態で、「Show Selected Tab」を実行すると、普通のタブに戻ります。
Tagged as: Product, development, JavaScript, userChrome.js
adblock#.uc.js
匿名で開発していたものも公開することにした。これはそのうちの一つ。
個人的に、Adblock Plusとかが重かったので、非力なPCでもそれなりのスピードで動くようにすることを目指して開発した。 詳しい使い方などは、Read Me.txtを見ていただければ分かると思う。Tagged as: Product, development, JavaScript, userChrome.js, Firefox, adblock
NScripterでロード時にエフェクトつけたりする方法
NScripterで、ロード時に何かをやる方法といったらloadgosub
命令だと思う。でも、ロード中に「Now Loading...」みたいなのを出したかったり、ロードし終わった時にエフェクトをつけて画面を表示したいということになると、loadgosub
命令だけではうまくいかない。
NScripterはセーブデータをロードする時、完全に読み込み終わるまでの間NScripter側で保存しておいたセーブ時の画面を暫定的に表示する。つまり、セーブポイントが作成された時の画面が、「Now Loading...」となっている画面だったり真っ暗な画面だったりすればよい。
ここで問題なのは、どうやって(ユーザーに画面を見せることなく)その画面の状態でセーブポイントを作成するかである。以下、シスカマ済で、
pretextgosub *pretext_lb loadgosub *onload autosaveoff
さて、まず一番最初に思いつくのは、セーブするサブルーチンで画像を表示し、savepoint
するという方法である。
*show_save_display lsp 0,%nowloading_bg,0,0 ;※ savepoint csp 0 ;残りの処理
しかし、実はこれではロードした時に※の部分でロードされてしまい、うまくいかない。じゃあどうやるのかというと、*pretext_lbの中でやる。
*pretext_lb amsp %nowloading_bg,0,0 savepoint ;◆ amsp %nowloading_bg,1000,0 ;残りの処理
こうすることで、NScripterによる表示文頭の自動savepoint → ◆でのsavepoint → 自動saveoffとなり、うまくロード画面が表示された状態ををセーブポイントにすることができる。実は、この*pretext_lbの中でのsavepoint
をやるためにautosaveoff
していて、autosaveoff
していないと*pretext_lbの中でうまくセーブポイントを作ることができず、失敗する。
また、lsp
やvsp
を使ってロード画面の表示をコントロールすると画面の再描画が起こり、画面がちらついてしまうため、再描画を起こさないamsp
を使って画面外へと移動させることで非表示にしている。
これでロード中に任意の画像を表示できるようになったので、あとは*onloadのなかで%nowloading_bgを好きなようにいじくり回せば完成。
Tagged as: development, nscripter
NScripterのloadgameではまった
ONScripterでは全く問題なかったのだが、NScripterでセーブ/ロードを繰り返すと、表示がおかしくなるというバグに遭遇した(画像1,画像2)。発生条件がランダムで、どう直したらいいのやらと試行錯誤していたら、どうやらセーブ時に変な状態でセーブされるせいで、ロードした時におかしくなるらしいということが分かった(何でこんな簡単なことが思いつかなかったのだろう・・・)。
というわけで、define節にautosaveoffを追加したらすんなり直った。高速化のためということでsaveon/saveoffを繰り返してたらどこかでおかしくなっていたらしい。当たり前といえば当たり前だけれども、セーブ/ロード関連でバグが発生している時は、saveon/offがおかしいのが原因ということがしばしばあるので(これで引っかかった回数は数知れず)、その度に銘じ直してるはずなのだがそのことを改めて認識させられた昨日4時間でだった。
Tagged as: development, nscripter
IE7の:hoverに関するバグ
ちょっとIE7向けにサイトを作らなければならないことがあって、IE7以上であればli要素への:hoverにも対応しているので、このサイトの左メニューをそのまま流用してみた。
そうしたら、案の定と言うか大きくわけて2つの問題が発生した。今回は、そのうちの1つについていろいろ調べたので、メモ代わりに書いておこうと思う。
そのバグは、:hover状態に無いサブメニューの外枠だけが表示されるというもの。下のコードをブラウザで表示させ、Alphaの部分にマウスをのせている時、本来であればGammaの部分自体が表示されないはずであるが、IE7では画像のようになぜかGammaの背景が表示されてしまう。
<ul id="menu"> <li> <a href="#">Alpha</a> <ul> <li> <a href="#">Bata</a> <ul> <li><a href="#">Gamma</a></li> </ul> </li> </ul> </li> </ul>
/* 装飾関連は省略 */ /* 展開処理 */ #menu li > ul{ width: 12em; /* hasLayoutをtrueに */ display: none; } #menu li:hover > ul{ display: block; }
これは、一度Gammaの部分までカーソルを動かし、そのまま外に動かしてメニューを閉じ、再び一番左のところにカーソルをのせると発生する。どうやらこれはIE7 ghost bugと呼ばれているらしく、IE7:hover ghosts bugなどで紹介されている。
この記事によると、:hover状態ではない要素がhasLayout = trueになっているのが原因らしい。だが、通常状態のときまでhasLayout = falseにしてしまうとそれはそれでメニューが展開できない状態になってしまうので、上のソースの場合、CSSを
/* 展開処理 */ #menu li > ul{ display: none; } #menu li:hover > ul{ width: 12em; display: block; }
のように、:hoverの時のみhasLayout = trueとなるようにする必要がある。
追記:分かりにくい構成だったので全面的に改稿。(2010/06/27)