Hatena::Groupmoz-addon

hogezilla RSSフィード

当ページに書かれているコードは、修正BSDライセンスのもと、再頒布して頂いて構いません。

 | 

2012-01-12

拡張機能で安全にprototype拡張をする

| 23:35 | はてなブックマーク - 拡張機能で安全にprototype拡張をする - hogezilla

この計画は失敗でした。util.Array(...).map(....) すると普通のwindow.Arrayインスタンスになってしまう...


拡張機能内で、Arrayなどをprototype拡張したい。でも、他の拡張機能の迷惑にならないようにしなければならない。

そんな欲求が少なからずある。

問題は、皆Firefoxwindowオブジェクト上にあるArrayを使うから、衝突が生まれるのである。なら別コンテキスト上でprototype拡張してもってくれば良いじゃない。ってことで、JavaScriptコードモジュールの登場。

注意点は

Components.utils.import("resouce://....");

で取ってくると、たぶんwindow.Arrayが上書きされちゃうので、

var util = {};
Components.utils.import("resouce://....", util); /* or XPCOMUtils.defineLazyModuleGetter(util, "Array", "resource://...."); */

とすべきなところ。

あと、インポートしたArraywiindow.Arrayは別のprototypeなので、単純なarray instanceof Arrayは失敗する可能性があること。Array.isArrayを使うべし。

トラックバック - http://moz-addon.g.hatena.ne.jp/teramako/20120112
 |