NetBeans の JavaScript のヒントの実装を読む
いままでのあらすじ
NetBeans で JavaScript を書くときに出るヒントがすごい。
そのプロパティがどのブラウザが対応しているかを出してくれるので
クロスブラウザのコードを書くときに重宝する。
見ての通り、Google Chrome にまで対応していて
これを見ながら書けばモダンブラウザに対応できる。
とはいえ、JavaScript を書くのにわざわざ NetBeans を
立ち上げるのは正直ダルいので、この DB だけ
抜き取って別のツール(Vim とか)で使いたい。
そこでこの部分の実装がどうなっているかを調べてみた。
Google Chrome 対応
NetBeans の JavaScript エディタのコードは
javascript.editing というパッケージの配下にある。
その中のヒントを表示している部分のコードを読んでみる。
http://hg.netbeans.org/release67/file/e56d38ad5d92/javascript.editing/src/org/netbeans/modules/javascript/editing/ElementUtilities.java
for (BrowserVersion v : BrowserVersion.ALL) { if (SupportedBrowsers.getInstance().isSupported(v) && !indexedElement.getCompatibility().contains(v)) { sb.append("<li>"); // NOI18N sb.append(v.getDisplayName()); // Chrome isn't in our version list yet if (v == BrowserVersion.SAFARI3) { sb.append("<li>Chrome"); } } }
ふむふむ。
// Chrome isn't in our version list yet
…うぉい!俺の「すごい」返せよ!
ということで NetBeans の Google Chrome 対応はイカサマでした。
ションボリ。
他のブラウザ対応
JavaScript のヒントで表示している情報は
実は javascript.editing 配下に置かれていない。
というのも、この情報は MDC とか W3C とかから取ってきているため。
これを生成するプロジェクトとして
main/misc/javascript.generatestubs がある。
http://hg.netbeans.org/main/misc/file/b1350d6f9437/javascript.generatestubs
でも動かすのはやっぱりダルいので
NetBeans のバイナリをインストールしてそこから探してやる。
今回は PHP 用の NetBeans (6.7.1) をダウンロードした。
Mac だと
/Applications/NetBeans/NetBeans 6.7.1.app/Contents/Resources/NetBeans/ide11/jsstubs/*.zip
に組み込みオブジェクトのスタブコードとして格納されている。
例えば DOM Element オブジェクトだったら stub_dom2_Element.js ファイルに
var Element = Object.extend(new Node(), { getAttributeNS: function(namespace, name) { // COMPAT=IE7|FF1|FF2|FF3|OPERA|SAFARI2|SAFARI3|KONQ // This is just a stub for a builtin native JavaScript object. }, getClientRects: function() { // COMPAT=FF3 // This is just a stub for a builtin native JavaScript object. }, }
みたいな感じ(抜粋)。
NetBeans はこの COMPAT= というコメントを見ている。
NetBeans によるとどうやら Element の getClientRects() は Firefox 3 しか対応していないみたい。
エディタ上でもそのように表示される。
ちなみに COMPAT= コメントがないプロパティに対しては
NetBeans は全ブラウザ対応という表示をする。
それでこの記事の冒頭で載せている
document.evaluate() が IE 対応とかなってるわけ。
…そうだね、中途半端だね。
まとめ
なんだか使えるようで使えない実装だということはわかった。
ションボリ。
これなら Aptana の DB の方がまともじゃないか。
http://svn.aptana.com/svn/aptana/aptana/ide_suite/branches/aptana_studio_1.5/ide_core/plugins/com.aptana.ide.editor.js/src/com/aptana/ide/editor/js/resources/
<method name = "getClientRects" scope = "instance" visibility = "basic"> <return-types> <return-type type = "Object"/> </return-types> <description>Returns a collection of all of the TextRectangle objects contained by the element.</description> <return-description>Returns a collection of all of the TextRectangle objects contained by the element.</return-description> <browsers> <browser platform = "IE" version = "5.0+"/> <browser platform="Mozilla" version="1.9+"/> </browsers> </method>
でも Aptana の DB は情報古いんだよなー。
使える DB どこかに落ちてないかなぁ。