【jQuery】IE8 でエラーが出て slimbox が使えない件について

このサイトでは画像の表示に slimbox を使っているのだが、いつの頃からか IE でバグって使えなくなっていたようだ。……そう、そもそも IE ではサイトの検証を全然してなかったのだorz

画像をクリックすると、謎のエラー「オブジェクトでサポートされていないプロパティまたはメソッドです。」が出てしまう。

2011-02-03_172614.png

IE8 の開発者ツールでデバッグしてみると、6289 行目(v1.4.4)、或いは、7284 行目(v1.5)が原因のようだ(このことに言及しているソースがキャッシュにしか残っていなかった。すぐに消えちゃうかも。)。このエントリーによると、ColorboxFancybox といったライブラリも使用不能になっていた模様。

Kawaz – 2010/12/17に書かれた日記一覧
http://webcache.googleusercontent.com/search?q=cache%3Ahttp%3A%2F%2Fwww.kawaz.org%2Fblogs%2F2010%2F12%2F17%2F&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&hl=ja&client=firefox-a

var elemdisplay = {},
	rfxtypes = /^(?:toggle|show|hide)$/,
	rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
	timerId,
	fxAttrs = [
(以下略)

これを以下のように書き換えると直る。

var elemdisplay = {},
	rfxtypes = /^(?:toggle|show|hide)$/,
	rfxnum = new RegExp( '^([+\-]=)?([\d+.\-]+)([a-z%]*)$', 'i' ),
	timerId,
	fxAttrs = [
(以下略)

jQuery-1.x.x.min.js を使っている場合は簡単に書き直せないので Perl を使った。

$ perl -i.orig -ple "s:bT=/([^/]*)/i:bT=new RegExp('\1','i'):" jquery-1.5.min.js

【Vim】新機能“conceal”構文属性を使う

Vim 7.3 の新機能“conceal”の使い道がよくわからなかったのだが、こんな使用例があるようだ。

js-mask – More concise JavaScript using Vim’s “conceal” feature : vim online
http://www.vim.org/scripts/script.php?script_id=3324

Javascript では“function(){}”をひたすら重ねていくのでコードが冗長になりがち。それを見た目なりときれいにしてしまおうというのがこのプラグイン。

例えばこんなコードが、

// 1~5の合計「15」と表示する
(function(){
    alert(
        (function( ary ){
            function sum( a ) {
                var s = 0;
                a.forEach( function( i ){ s += i } );
                return s;
            }
            return sum( ary );
        })( [ 1, 2, 3, 4, 5 ] );
    );
})();

Continue reading

【Perl, Javascript】数値に位取りのコンマを挿入する

ものすごく車輪の再発明な気もするが、備忘録としておいておく。

Perl クックブックのレシピ 2.16 によると、表題のことを行う関数は次のように表せる。

sub commify {
    my $text = reverse $_[0];
    $text =~ s/(\d\d\d)(?=\d)(?!\d*\.)/$1,/g;
    return scalar reverse $text;
}

これを Javascript で表すと次のようになる。

String.prototype.reverse=function(){return this.split('').reverse().join('')};
Number.prototype.commify=function(){return this.toString().reverse().replace(/(\d\d\d)(?=\d)(?!\d*\.)/g,'$1,').reverse()};
// 使用例
alert( (123456789).commify() );     // 「123,456,789」
alert( (-123456789).commify() );    // 「-123,456,789」
alert( (1234.56789).commify() );    // 「1,234.56789」

Continue reading

Stylish で Firebug や Pentadactyl のフォントを変更する

Stylish でページの見た目をいじるときに、Firebug を利用して目的の要素を探すときがよくある。

2010-11-19_112825.png

この方法は便利だが、調べることが出来るのは表示したページの中身だけで、Firefox や Firebug 本体がどのような要素から出来ているのか調べられない。これは半ば諦めていたのだけれど、それを DOM Inspector を使って解決する方法を知った。

Firebug コマンドラインのフォントを変更とDOM Inspectorの使い方
http://efcl.info/2009/0927/res1363/

Continue reading

jQuery 版 Last.FM ウィジェットを導入してみた

Last.FM は、PC や iPhone などの DAP で音楽を聴く人にとって必携のツールだ。SNS 的な機能を抜きにしても、自分の音楽嗜好に合わせて似たアーティスト・楽曲を提案してくれる機能は非常に便利。

Flash 版 Last.FM ウィジェット

以前の記事で、Last.FM の情報を表示してくれるウィジェットについて書いた。

Last.fmウィジェットはどこに行った? | blog.delphinus.dev
https://blog.delphinus.dev/2010/02/lastfm-widget.html

このウィジェットは Flash を使っており、いまいち好みでなかったこと、また、いつの間にか公式サイトでも非推奨になってしまったことから使用を止めていた1

jQuery 版 Last.FM ウィジェット

そこでググってみると、Last.FM API を利用したウィジェットを発見。早速利用してみた。

Last.FM for jQuery
http://labs.engageinteractive.co.uk/lastfm/

CD



上記サイトにも導入方法は書いてあるのだが、改めて纏めてみる。

Continue reading

【Javascript】オブジェクトを new してもプロトタイプのプロパティは初期化されない件

Javascript でオブジェクトを new するとき、プロトタイプのプロパティは単にコピーされるだけで、初期化はされない。これに気づかずに一日無駄にしたorz 例を挙げると、

var MyObj = function(){};
MyObj.prototype = {
    a: function(){
        alert( this.b.join( " : " ) );
    }
       ,b: [ 1, 2 ]
};

var obj1 = new MyObj();
obj1.a();    // 「1 : 2」と表示される

var obj2 = new MyObj();
obj2.b.push( 3 );
obj2.a();    // 「1 : 2 : 3」と表示される

var obj3 = new MyObj();
obj3.b.push( 4 );
obj3.a();    // ????

18 行目で表示されるのは次のどちらだろうか。

  • 1 : 2 : 4
  • 1 : 2 : 3 : 4

答えは後者、1 : 2 : 3 : 4である。

Continue reading

Pentadactyl で ime_controller.js(のようなもの)

Pentadactyl な環境でコマンドラインで IME を OFF にするのを忘れてると、次にコマンドラインに入ったときに日本語入力になってしまってストレスがたまる。Vimperator ならば ime_controller.js で制御できたのだが、Pentadactyl でこのプラグインは動かない。半ば諦めていたのだが、代替策を発見。

Continue reading