たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。
の動向はもえじら組ブログで。
宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能!
Firefoxの拡張機能開発でいちいち専用ツール使うのもめんどくさかろうということで、こんな物を作ってみた。無駄にXUL。
同じ内容でHTML5版。(2011年12月27日追加)
いちいちこのページにアクセスするのがめんどい人は、ダウンロードしてローカルに置いておくこともできます。というか、そうしてください。
tabbrowserウィジェットにloadOneTabなんてメソッドが増えとる……
定義した人は何考えとるんジャロ? 意味が分かんないよ…… なんでaddTabの引数を今までの互換性を保ちつつ新たにもっと詳細な指定ができるように改良するという方向に持っていかないのだろうか。不思議。
NoScriptいいね。
FirefoxのセキュリティモデルはCookieやポップアップブロック、拡張機能のインストールの許可などを見ると分かるように、基本的には「サイト単位で許可・禁止を決める」ものなんだけど、JavaScriptのセキュリティ設定だけは、IEのセキュリティゾーンのように、サイト単位ではなくポリシー単位で設定を行うものになっている。
このモデルのずれを「ポリシー単位」側に統一するのがポリシーマネージャなんだけど、IE転向組でもない限りは結構違和感があるはず。これとは逆に、「サイト単位」側に統一してくれるのが、NoScriptだと言うことができる。
ていうかいいかげんこの、セキュリティポリシーというレガシーな仕組みをなくしてしまわないんでしょうか? 標準ではGUIもないしさあ。
割と最近までMozillaには、あるイベントリスナを無効にするのにremoveEventListener()メソッドを使うと、他のイベントリスナまでも巻き添えに無効にしてしまうというバグがあった。拡張機能同士のコンフリクトの中でも最も厄介なトラブルは、これに起因するものだ。
ウィンドウの読み込み完了時のタイミングで初期化処理を行うために、addEventListener()で初期化関数をloadイベントのリスナとして登録することがよくある。イベントハンドラは一つしか登録できないのに対して、イベントリスナならいくつでも登録可能だからだ。
で、メモリの解放し忘れを防ぐために気を利かせて、この初期化専用のイベントリスナをremoveEventListener()で登録解除するようにしていると、冒頭の問題にぶち当たってしまう。ある拡張機能の初期化処理が行われたら、その次にイベントリスナとして登録されている初期化処理が行われなくなってしまう、ということが起こるのだ。Popup ALT Attributesの25日版とTab Mixとのコンフリクトは、たまたまこの二つがその順番でインストールされていたからこのような形で問題が表面化したに過ぎず、本質的には、Popup ALT AttributesにもTab Mixにも非は無い。あくまでMozillaのバグだ。
こんなのまで僕の落ち度にされちゃあたまったもんじゃないですよ、なんで僕がMozillaのバグの尻拭いで説明と対応をさせられなきゃあならないんですか、ってんですよ……ブツブツ……
アソシエイトIDを持ってる人向け。
var amazon_id = ''; var title = _selection || prompt('書名を入力してください'); if (!title) return; var isbn = prompt('ISBNコードを入力してください'); if (!isbn) return; isbn = String(isbn).replace(/^(urn:isbn:|isbn)/gi, ''); _setClipBoard('<a href="urn:isbn:'+isbn+'">'+title+'</a>(<a href="http://www.amazon.co.jp/exec/obidos/ASIN/'+isbn.replace(/-/g, '')+'/'+amazon_id+'/ref=nosim" title="'+title+'">Amazon.co.jp</a>)');
classの値は好みで。
var base = _selection || prompt('ルビを付ける文字列(ルビベース)を入力してください'); if (!base) return; var text = prompt('ルビ文字列(ルビテキスト)を入力してください'); if (!text) return; var attr = confirm('読みがなですか?') ? ' class="読み"' : '' ; _setClipBoard('<ruby><rb>'+base+'</rb><rp>(</rp><rt'+attr+'>'+text+'</rt><rp>)</rp></ruby>');
テストケースを見る限り、HTMLの属性としてイベントハンドラを定義しているケースについては対処可能のようだが、JavaScriptでイベントハンドラを追加している場合については対処不可能だ。
やっぱリ手詰まり。
――マニフェストファイルをいじって、セキュリティの制限を緩くするようにした。僕が把握してる範囲では、攻撃可能な穴はなさげだけれども、穴ってのは大抵、予想もしてないところから見つかるからなあ……まあその時にはその時だ。
冗談じゃないっすよ。これを以て「Piroの作る物はやっぱ穴だらけだな」とか言われるだなんて。実装見たら明らかじゃないすか。今回の問題はどー見たってGoogle Toolbarの横暴が原因ですよ。
Google Toolbarの野郎、こともあろうにイベントハンドラそのものを上書きしくさりやがってる。こちとら可能な限り元のコードに影響を与えない方法を考えてあれこれ対策してるってえのに、そんな配慮のカケラもない。そんなの知ったこっちゃないね、俺様は天下のGoogle様なんだからFirefoxのコードを引っかき回したって許されるんだぜ、そんな驕りが窺い知れるってもんですよ。
ああムカツク。
――と、よく調べずにキレてたんだけど、どうも違う原因っぽい?
――ちゃんと調べてみたら、やっぱりGoogle Toolbarが悪者だということがはっきり分かった。
調べていて気付いたけど、これは、子タブについての扱いが、コードを書いた時期によって変わってしまっていることが原因だった。ある時期には「タブの要素ノードの配列」、またある時期には「タブのID文字列の配列」、またあるときは「タブのID文字列の配列をパイプ("|")で連結したもの」と、もー、バラバラ。
JavaScriptは型チェックのない言語なので、こういうことがよく起こる。コーディング時に意識を高く保つ必要があるのが、JavaScriptの欠点といえば欠点ですな。
何が悔しいって、自分ができることってこれだけしかないと思っていながら、しかしこんなもの金になるはずがないと思っていて、自分ができなかったこと、なんだかんだと理屈をこねまわして「やらない方がいいだろう」と自分で自分を説得したことを、成功したか失敗したかどうかは知らんけどとにかく形にしてしまった人がいること。
煮え湯を飲まされるって、こういう感じ。