Posts Tagged ‘UI’
ページ移動時などに音を鳴らすアドオン「KIRISAKE」
またJetpack SDKで1つアドオンを作成してみました。
リンクをクリックしてページ移動などの通信が始まった際に、風を切り裂くような音を出すアドオンです。
作った理由ですが、
移動する際に音を出すと、ちゃんとリンクをクリックできたかなどが聴覚的にも認識できるのと、上記のような音を使う事でブラウザが少し早くなったような感じがします(I shallplease)
という後付けの理由があったりしますが、HTML5のAudioタグを使って見たかったというのが第一の要因です。
そういう気分になったのは中国のJetpackerのLT資料を見つけて、pageWorkerでhtmlファイルを読み込んでその中でAudioタグを鳴らすというサンプルが載っていたので実践してみました。
見つけたLTの資料はこれJetpack SDK: The new possibility of the extensions on browser
処理的にはたいしたことはやっていませんが、Jetpack SDKにはページ移動(ページを読み込みじゃなくて、通信が始まった瞬間)に反応するAPIはまだないような感じなので、nsIWebProgressを使った普通のFirefox拡張機能と同じように直に書きました。
Components.interfacesとか使う必要性が出てくるわけですが、Jetpack SDK0.6からはCiやCcというエイリアスがデフォルトではなくなったので、以下のようにrequireしてから使う必要があります。
Jetpack SDK 0.6 がリリースされました « Mozilla Developer Street (modest)
var {Cc, Ci} = require("chrome");
ちなみにこのvar {a,b} = obj;みたいな表記は分割代入というJavaScript 1.7からの機能を使ったもので、
var Cc = require("chrome").Cc , Ci = require("chrome").Ci;
というのと同様の意味になります。一部地域ではよく見かけるので覚えておくと便利です。
参考サイト
- Progress Listenersでロケーションバーのurl変更されたときに何かする – フリーフォーム フリークアウト
- Latest topics > Split Browser開発のよもやま話(6):分割されたブラウザの作り込み – outsider reflex
Post Now browsing to TwitterをOAuth認証に対応しました
Twitterへ今見ているサイトをコメントと共に投稿する「Post Now browsing to Twitter」がOAuth認証に対応しました。
このGreasemonkeyをインストールする前に、以前のバージョン(2010年6月より前)のものを入れている場合はそれをアンインストールしてから、改めて「Post Now browsing to Twitter」をインストールして下さい。(以前と設定の互換が無くなったため設定ごと破棄をお勧めします)
ツール→Greasemonkey(もしくはステータスバーの猿アイコン)→ユーザースクリプトの管理→Post Now browsing to Twitterを選択→✓関連付けられた設定も削除にチェック→アンインストール
Greasemonkeyでサイト既存CSSの影響を受けないポップアップパネルを作る方法
Greasemonkeyは各サイトでユーザースクリプトを実行できて便利ですが、ある要素を挿入したときにそれがサイトに元々書いてあるCSSの影響を受けてしまうことがあります。
一つのサイトならまだしもhttp*で動くようなものだと対応仕切れないのでiframeを使いサイトに書いてあるCSSの影響を受けないパネルを作る。
iframeの中はそのサイトにあるCSSの影響を受けないので、iframe内にGreasemonkeyで表示したいものを置けば影響を受けないものが作成できる。
makeFrameというのが今回の主題。
makeFrame(gotFrame1);
makeFrame(gotFrame2);
function gotFrame1(iframe, win, doc) {
iframe.height = "350";
iframe.width = "500";
iframe.style.position = "fixed";
iframe.style.bottom = iframe.style.left = "0";
doc.body.innerHTML += "Frame1ですね。"
}
function gotFrame2(iframe, win, doc) {
iframe.height = "350";
iframe.width = "500";
iframe.style.position = "fixed";
iframe.style.bottom = iframe.style.right = "0";
iframe.style.backgroundColor = "#ddd";
doc.body.innerHTML += "Frame2ですよ。"
}
// Creates a new iframe and attaches it to the DOM, waits for it to load, tests
// that we did not hit https://bugzilla.mozilla.org/show_bug.cgi?id=295813 nor
// https://bugzilla.mozilla.org/show_bug.cgi?id=388714 (and retries otherwise),
// to finally call the provided done callback, passing the iframe, its window
// and document. (The optional name parameter, if provided, will be used to name
// the iframe in window.frames, or be created as "pane-1" onwards, otherwise.)
/*
var cacllback = function(iframe, win, doc){
}
makeFrame(cacllback);
makeFrame(cacllback , "frameName");
makeFrame(cacllback , "frameName" , true);// debug mode
*/
function makeFrame(callback/*(iframeTag, window, document)*/, name, debug) {
function testInvasion() {
iframe.removeEventListener("load", done, true);
var message = ((new Date) - load.start) + "ms passed, ";
try { // probe for security violation error, in case mozilla struck a bug
var url = unsafeWindow.frames[framename].location.href;
message += url == "about:blank" ? "but we got the right document." : "and we incorrectly loaded " + url;
if (debug) console.log(message);
done();
}
catch(e) {
if (console && console.error && console.trace) {
console.error(e);
console.trace();
}
if (debug) console.log(message + "and our iframe was invaded. Trying again!");
document.body.removeChild(iframe);
makeFrame(callback, name);
}
}
function done() {
clearTimeout(load.timeout);
if (debug) console.log("IFrame %x load event after %d ms", framename, (new Date) - load.start);
var win = unsafeWindow.frames[framename];
var doc = iframe.contentWindow.document;
// 苦し紛れのエスケープ
var esframeName = "'"+framename+"'";
// 自分自身のiframeを閉じるボタン
var xImg = doc.createElement("img");
xImg.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAATElEQVQoka2RSQ4AIAgD+f+jp96M0aq49AgdUiB0qZCkONQ/EBAwDOrrU7A1uZqN2hodtNwRqNdz0VOg62+jzuDUcVzkf+/I6h28UQHjW25Gob5AIAAAAABJRU5ErkJggg=="
xImg.setAttribute("onclick", "parent.document.getElementsByName("+esframeName+")[0].style.display='none';");
xImg.setAttribute("style","background-color:red;border:3px;position:fixed;top:0px;right:0px");
doc.body.appendChild(xImg);
callback(iframe, win, doc);
}
var iframe = document.createElement("iframe");
var framename = iframe.name = typeof name != "undefined" ? name : ("pane" + (makeFrame.id = (makeFrame.id || 0) - 1));
iframe.setAttribute("style", "overflow:auto;z-index:18999; border:0; margin:0; padding:0;top:auto; right:auto; bottom:auto; left:auto;background-color:#fff");
iframe.src = "about:blank";
iframe.addEventListener("load", done, true);
var frames = makeFrame.data || {};
var load = frames[framename] || {
start: new Date,
sleepFor: 400
};
load.timeout = setTimeout(testInvasion, load.sleepFor);
load.sleepFor *= 1.5;
frames[framename] = load;
makeFrame.data = frames;
document.body.appendChild(iframe);
}
makeFrame関数は(callback ,[フレームのname , debugモード])という引数なので、gotFrame1という関数(callback)を引数にしてmakeFrameを読んでいる。 callbackには(iframe, iframeのwindow, iframeのdocument)が入ってるいるので、iframeのstyleをいじればパネルの色やサイズ、表示する場所などを指定できる。 上記のソースだと左下にframe1、右下にframe2が表示できる。
元ネタからの改良点
- パネルを閉じるボタンの追加
それぞれのパネル右上に表示されているxボタンは、パネルを閉じるボタンとして機能している。 innerHTMLが+になってるのはiframe内にxボタンを追加しているため。
- Flashより上部に表示
パネルなのでFlashがあってもその上に表示できるようにした方が動作的にはいいと思うのでCSSを少し修正した。
要素をFlashより上部する方法は以前書いたFlashよりも前面にポップアップを表示するかFirefox 3.6でFlashの上に position: fixed; な要素を表示できなくなった件 – なんとなく目記を見るといい。
Firefox3.6では挙動が変わったので注意。
Flashより上に表示するには”position: fixed; overflow: auto;”とした要素であり、以下の条件を満たす必要がある。
- 透過でない(Opacityを使わない or 背景色を無指定にしない)
- CSS3?(-moz-)系のstyleを使わない。(-moz-box-shadowなどは陰の部分だけFlashより後ろに表示されてしまう
角丸border-radiusなどは要素に適応されるので要素全体がFlashより後ろに表示される。)
このmakeFrameを使ったサンプルGreasemonkeyとして
ニコニコ動画再生ページからその動画のマイリストコメントをパネル上で参照できる
- Nico MylistComments for Greasemonkey
- http://userscripts.org/scripts/show/72319
を作ってみた。
元ネタ(元ネタのサンプルはtypoがあるので、そのままだと動かない)
- HTML Injection Tips – greasemonkey – GitHub
- http://wiki.github.com/Martii/greasemonkey/html-injection-tips
ニコニコ動画とflvplayer_wrapperの履歴
以前、書いたものをちょっと修正しただけのものなので、意味がおかしい文が混じっている可能性があるので注意
****
http://files.getdropbox.com/u/132475/flvplayer_wrapper_mod.zip
使用用途と方法が特殊なため簡単に説明。
flvplayer_wrapperはニコニコ動画の旧プレイヤーをオーバーライドして、旧プレイヤーに新しい機能を追加 することを目的としたソフトウェアです。
旧プレイヤーは2009年7月に開発終了の宣言が出て( http://www.nicovideo.jp/?p=about_player )、
新プレイヤーに切り替わったため、現在は上記のURLのように旧プレイヤーが使用できる一部動画のみで動作する。
使用方法はニコニコ動画のプレイヤーの代わりにflvplayer_wrapperをブラウザ上で呼び出さないといけないため、
プロキシソフトであるProxomitron(オミトロン http://site.halfmoon.jp/movielist/29.html ) や NicoCache_nlといったWebページを書き換えるソフトが必要となります。
具体的な使用方法はwiki( http://wrapper.wiki.zoho.com/ )やreadme.txtにまとめてあるため割愛させていただきます。
既に設定をしてある状態で配布している Proxomitron、
いわゆる設定済flvplayer_wrapper( http://site.halfmoon.jp/movielist/90.html )を使用しているユーザが数千人程度いると思われます。
(1)作ろうと思ったきっかけ
flvplayer_wrapper modとは、名前のように2ちゃんねるで開発されていたflvplayer_wrapperという原型となったソフトがあり、
その公開されていたソースを元に現在の大部分を完成させたflvplayer_wrapper customがありました。
2ちゃんねるでflvplayer_wrapper customの制作者が開発を終了するとの知らせと、同時期にNicoCacheのスレに おいて
簡単なflvplayer_wrapper customの改変方法が書いてあったのが、flvplayer_wrapper modを開発しようとしたきっかけです。
つまり、flvplayer_wrapper modはflvplayer_wrapper customの公開されていたソースコードが元となっています。
flvplayer_wrapperは何人かの制作者によって勝手に受け継がれて作られているので、総称してflvplayer_wrapper と呼ばれている。
flvplayer_wrapperはmingというphpのFLASHを生成するためのライブラリが使われており、中身はAS2がほとんどとなっています。
2008年7月11日に初めてflvplayer_wrapperをさわり始めた当初は、プログラミングもほとんどやったことがなかったので、
少しだけかじっていたjavascriptの知識を元に手探りで改変とニコニコ動画の仕様変更へと対応していました。
そのため、2ちゃんねるの掲示板上での動作報告やアドバイスなどがなかったら、保持していくことはなかったと思います。
(2)工夫点や苦労した点
flvplayer_wrapperはニコニコ動画のプレイヤーにオーバーライドするという仕様上、ニコニコ動画のプレイヤーの
変更に影響を受けやすいため、頻繁に行われていた仕様変更に対応することに多くの時間を費やしました。
ニコニコ動画のプレイヤーをデコンパイルした結果を比較しながら、どこがどのように変更したかを確認したから、
flvplayer_wrapperにそれを落とす作業が多く、その中で新しく便利な追加機能を加えていきました。
特にニコニコ動画でユーザーニコ割が導入された際はかなり大きな変更があり、なおかつ当時はプログラミング知識もあまりなかったため、かなり苦戦してユーザーニコ割へ対応した覚えがある。
また、flvplayer_wrapperは機能の多さと画面の広さを維持したいという思いがあったため、UIにいくつかのパターンを用意したり( http://is.gd/1YI7C )、
プレイヤーを最大化した上でのユーザーニコ割の表示に動画自体の邪魔にならないようにするなどの工夫をした。
ここでも、2ちゃんねるのオミトロンスレでのUIイメージの提供などの協力があったためできたと思います。
flvplayer_wrapperは自分単独で作成したものではありませんが、2008年7月11日から旧プレ イヤーの保持が終了されている現在までに渡って、自分が一番多くの時間を使って関わったソフトウェアである。
nicocache_nlを使用すれば、誤魔化しながらもswfでも動かしたり延命できるかもしれません。
(nicocache_nlには新型用にコンパイルされたswfを旧型(wrapper等)でも動くように変換するソフトが付いているので、
それを利用する。詳しくはNicoCache_nlのreadme.txtやwiki等を参照)
- FrontPage – NicoCache_nl
- http://nicolist.net/nicocache_nl/wiki/
http://files.getdropbox.com/u/132475/flvplayer_wrapper_mod.zip
(0)使用用途と方法
使用用途と方法が特殊なため先に説明させていただきます。
flvplayer_wrapperはニコニコ動画の旧プレイヤーをオーバーライドして、旧プレイヤーに新しい機能を追加することを目的としたソフトウェアです。
旧プレイヤーは2009年7月に開発終了の宣言が出て( http://www.nicovideo.jp/?p=about_player )、
新プレイヤーに切り替わったため、現在は上記のURLのように旧プレイヤーが使用できる一部動画のみで動作する。
使用方法はニコニコ動画のプレイヤーの代わりにflvplayer_wrapperをブラウザ上で呼び出さないといけないため、
プロキシソフトであるProxomitron(オミトロン http://site.halfmoon.jp/movielist/29.html ) や NicoCache_nlといったWebページを
書き換えるソフトが必要となります。
具体的な使用方法はwiki( http://wrapper.wiki.zoho.com/ )やreadme.txtにまとめてあるため割愛させていただきます。
既に設定をしてある状態で配布しているProxomitron、
いわゆる設定済flvplayer_wrapper( http://site.halfmoon.jp/movielist/90.html )を使用しているユーザが数千人程度いると思われます。
(1)作ろうと思ったきっかけ
flvplayer_wrapper modとは、名前のように2ちゃんねるで開発されていたflvplayer_wrapperという原型となったソフトがあり、
その公開されていたソースを元に現在の大部分を完成させたflvplayer_wrapper customがありました。
2ちゃんねるでflvplayer_wrapper customの制作者が開発を終了するとの知らせと、同時期にNicoCacheのスレにおいて
簡単なflvplayer_wrapper customの改変方法が書いてあったのが、flvplayer_wrapper modを開発しようとしたきっかけです。
つまり、flvplayer_wrapper modはflvplayer_wrapper customの公開されていたソースコードが元となっています。
flvplayer_wrapperは何人かの制作者によって勝手に受け継がれて作られているので、総称してflvplayer_wrapperと呼ばれている。
flvplayer_wrapperはmingというphpのFLASHムービーを生成するためのライブラリが使われており、中身はAS2がほとんどとなっています。
2008年7月11日に初めてflvplayer_wrapperをさわり始めた当初は、プログラミングもほとんどやったことがなかったので、
少しだけかじっていたjavascriptの知識を元に手探りで改変とニコニコ動画の仕様変更へと対応していました。
そのため、2ちゃんねるの掲示板上での動作報告やアドバイスなどがなかったら、このプロダクトを保持していくことはなかったと思います。
(2)がんばった点や苦労した点
flvplayer_wrapperはニコニコ動画のプレイヤーにオーバーライドするという仕様上、ニコニコ動画のプレイヤーの
変更に影響を受けやすいため、頻繁に行われていた仕様変更に対応することに多くの時間を費やしました。
ニコニコ動画のプレイヤーをデコンパイルした結果を比較しながら、どこがどのように変更したかを確認したから、
flvplayer_wrapperにそれを落とす作業が多く、その中で新しく便利な追加機能を加えていきました。
特にニコニコ動画でユーザーニコ割が導入された際はかなり大きな変更があり、なおかつ当時はプログラミング知識もあまりなかったため、かなり苦戦してユーザーニコ割へ対応した覚えがある。
また、flvplayer_wrapperは機能の多さと画面の広さを維持したいという思いがあったため、UIにいくつかのパターンを用意したり(
http://is.gd/1YI7C )、
プレイヤーを最大化した上でのユーザーニコ割の表示に動画自体の邪魔にならないようにするなどの工夫をした。
ここでも、2ちゃんねるのオミトロンスレでのUIイメージの提供などの協力があったためできたと思います。
flvplayer_wrapperは自分単独で作成したプロダクトではありませんが、2008年7月11日から旧プレイヤーの保持が終了されている現在までに渡って、自分が一番多くの時間を使って関わったものである。
Twitterへ見ているサイトを投稿するGreasemonkey「Post Now browsing to Twitter」更新
今見ているサイトのURLをコメントとともにTwitterに投稿するGreasemonkeyであるPost Now browsing to Twitterを更新したので更新内容について。
どんな感じのものかは以前の記事を見てください。
- 今見ているサイトをTwitterに投稿する「Post Now browsing to Twitter」 | Web scratch
- http://efcl.info/2009/0929/res1369/
更新点
- 入力UIの変更
今まではコメントの入力を通常のプロンプトで行っていましたが、入力用のテキストエリアをショートカットを押した際に表示する用にしました。
コメントするUIとポストした際の並びに統一感がでたのと、コメントの入力に対してリアルタイムで合計の文字数をカウントアップします。(140文字をオーバーしても自動でタイトルを切って140文字に納めるのでカウントアップにしてます。)
コメント入力後(未記入でもOK)Ctrl+Enterを押すとTwitterにポストします。
コメント入力をキャンセルしたい場合はESCキーを押すことでキャンセルできます。
また、promptの時とは違いテキストエリアで入力するので、モーダルダイアログのように入力欄が表示されているとき、ページ上のテキストを選択できないということがなくなります。
後は細かい修正。
インストールはこちらから
- Post Now browsing to Twitter
- http://userscripts.org/scripts/show/46441
有料スクリーンキャプチャソフトのメモ書きまとめ
感覚的なスクリーンキャプチャソフト(制止画)の感想です。
とにかく高機能な感じで、大抵のことはコレで事足りるはず。
UIが少し古くさいが、TextSnap™(キャプチャー中の文字列をコピーできる)や高機能なエディタや画像加工ができる。
DirectXや3Dfx、GLIDEなど殆どの部分をキャプチャーできるので、申し分ない機能性を持ってる。
- Hyperionics – the best screen capture software – Free download
- http://www.hyperionics.com/
こちらも高機能なキャプチャーソフト。
保存形式が多彩で、Webページのリンクを保ったままswfに書き出したりoffice系ソフトとの連携もできる。
さらに高機能なエディタ(これ単独でも使える)があり、UIもキレイでWeb2.0的なキャプチャーを作りやすい。
エフェクトも多彩で見た目を重視したい時に使用するといい。
ちなみに日本語版もあるが、すなおに英語(本家)の方を追うようにしといた方がいい。
- Screen Capture | Snagit | Screen capture software by TechSmith
- http://www.techsmith.com/screen-capture.asp
Vistaを美しくキャプチャーするために特化しているキャプチャーソフト。
ウィンドウを欠ける事なくとれたり、シャドウやリフレクションなど、美しく取るための機能に特化している。
エディタなどの機能はなく、機能は豊富とは言えないが、キャプチャーするのが気持ちいいという感じのソフトだ。
また、作者が個人開発?なので、フォーラムで積極的に取り組んでいるので将来的にも面白いソフト。
- FastStone Capture
- http://www.faststone.org/FSCaptureDetail.htm
FastStoneシリーズのキャプチャーソフト。
機能としては、一通りのキャプチャー方法や、簡易なエディタなど少し見劣りするが、十分に高機能なソフトである。
特徴として動作が軽い事があげられる。
シンプルなんだけど、いろいろと使いやすいキャプチャーソフトだ。
日本語化パッチも別所で配布されている。
- それさえもおそらくは平穏な日々
- http://hibiheion.seesaa.net/
画像からテキストまでもスクラップして一つの画像にするRipt
RiptはWEB上にあるテキストや画像を現れるアイコンへドラッグするだけできもちいい音を立ててスクラップする。
また同様にフォルダーにある画像をD&Dしても同じである。
このソフトをさわって久しぶりに興奮した気がする。なぜそうなったのかと言うと、とてもキレイなUIをしているし、
スクラップするのが簡単でテキストも簡単にスクラップでき、その時の音も気持ちいいw
このソフトはスクラップしておくことに目的があるみたいで、スクラップしたものにメモ書き(exifみたいに見えない情報)を
書き加えることもできる。
自分的にはWEBで公開用にスクリーンショットや説明みたいなテキストを載っけていくように使いたいと思った。
ソフトの開発目的が保存という点にあるのでまだまだ、公開向けファイルを作るには少し機能が足りないところがある。
たとえば、保存する画像のキャンバスサイズは1086×758の固定であったり、保存形式がjpgと独自の保存形式である
.ript(メモ書きなどの内容も保存するもの)しかないという点。
しかし一度さわってみると分かるように とても斬新でくせになりそうな感じのソフトである。(ジャンルの分別も難しい)
機能不足なところ(自分が使いたい方向にとってと言う話ですが)作者は積極的にFeedbackを募集しているので
Ript™ Feedback今後に期待したくなるソフトです。
動作しているところを見るには
夢も視覚化 WEBから美しいスクラップブックをサクッと作れる「Ript 」|WEBマーケティングブログ
が参考になると思います。
MOONGIFTのポップで楽しいスクラップブック「Ript」という記事も参考になりますね。(自分はここで知りました。)
とにかく一度さわってみることをオススメできるソフトです。
Ript™
http://www.ript.com/



