ブックマーク / nanto.asablo.jp (8)

  • SpiderMonkey の判別とブラウザ判別: Days on the Moon

    1 行でブラウザ判別を行うスクリプト (IE 用の日語紹介記事、Firefox、Safari 用の日語紹介記事) が注目を集めています。それによると Firefox の判別は次の 15 文字で行えるそうです。 //Firefox detector 2/3 by DoctorDan FF=/a/[-1]=='a' いったいなぜこれで Firefox が判別できるのか、少し探ってみました。 何を判別しているのか SpiderMonkey のソースコードを探る より短い SpiderMonkey の判別法 「ブラウザ判別」としての不備 まとめ 参考文献 何を判別しているのか 実際に探っていく前にひとつ注意しなければいけないことがあります。それは、上記のコードが Firefox を判別するものではないということです。このコードには Web ブラウザ固有のオブジェクトモデルに関する情報が含まれて

  • HTML と XHTML で同じ XPath を使う: Days on the Moon

    通常、XPath を書くときは //p のようにすることが多いと思いますが、これには名前空間の指定が含まれていないため、XHTML 文書 (MIME タイプが application/xhtml+xml で提供されている文書) では使えません。これに対するアプローチとしては、//h:p のようにあらかじめ XPath 式に名前空間の指定を含めておき、リゾルバによる名前空間接頭辞の解決時に HTML と XHTML とで処理を分けるというのが一般的でした。「XPathNSResolver のクロスブラウザとか」や「document.contentType == "application/xhtml+xml"なページでの$X」で扱っている方法です。 とはいえ、いちいち名前空間接頭辞を指定するのは面倒くさいですし、同じ名前空間に対する接頭辞が人によって違うのも不便です。XPath 式の中で要素名

  • JS オタが非オタの彼女に JavaScript 世界を軽く紹介するための 10 実装: Days on the Moon

    アニオタが非オタの彼女にアニメ世界を軽く紹介するための 10 が流行っているようで (◯◯オタが非オタの彼女に◯◯世界を紹介するための 10 まとめ)。えっ、もうブームは去った? まあそんなこと気にせず勝手にいっちゃいます。 軽く紹介するための 10 まあ、どのくらいの数の JS オタがそういう彼女をゲットできるかは別にして、「オタではまったくないんだが、しかし自分のオタ趣味を肯定的に黙認してくれて、その上で全く知らない JavaScript の世界とはなんなのか、ちょっとだけ好奇心持ってる」ような、ヲタの都合のいい妄想の中に出てきそうな彼女に、JavaScript のことを紹介するために見せるべき 10 実装を選んでみたいのだけれど。(要は「脱オタクファッションガイド」の正反対版だな。彼女に JavaScript を布教するのではなく相互のコミュニケーションの入口として) あくま

  • Kanasan.JS JavaScript 第 5 版読書会 #5: Days on the Moon

    Kanasan.JS JavaScript 第 5 版読書会 #5 に行ってきました (当日のチャットログ、参加者のブログ記事一覧)。今回からはいよいよ第 2 部、クライアントサイドスクリプトということで、13 章全体を読みました。 控えめな JavaScript JavaScript をどのように使うかの指針として、「控えめな JavaScript (unobtrusive JavaScript)」(WaSP DOM Scripting Task Force の声明文) というキーワードが挙げられています。 HTML マークアップと JavaScript コードを分離する。 正常に機能を停止する。ブラウザがある機能を持たない、もしくは JavaScript 自体が動作しない場合であっても、コンテンツが利用可能であるようにする。 アクセシビリティを低下させるのではなく、向上させる。 これは

  • プリミティブ値でもプロトタイプ的継承: Days on the Moon

    書き上げた後に元記事の続きが出ているのに気づいたが、方向性が違うようなのでそのまま掲載。 404 Blog Not Found:javascript - プロトタイプ的継承 (元記事: Prototypal Inheritance) より。継承という言葉は意味が広いので、この操作に対してはチャイルドの作成といったほうが個人的にはわかりやすい。 さて、元記事で紹介されているコードではプリミティブ値からのチャイルドの作成 (継承) ができなかった。これはなぜかといえば、オブジェクト作成の際、プリミティブ値をプロトタイプ ([[Prototype]] 内部プロパティ、__proto__ プロパティ) に設定することはできないからである。 そこで、プリミティブ値が渡された場合は、それをラッパオブジェクトに変換することにする。といっても場合分けの必要はない。Object 関数を使えば、プリミティブ値

  • Shibuya.js in Kyoto 発表資料「取説 正規表現」: Days on the Moon

    オープンソースカンファレンス 2008 Kansai 内のセッション、Shibuya.js in Kyoto に発表者として参加させていただいたので、資料を公開します。 取説 正規表現 内容は JavaScript での正規表現の基的な扱い方です。正規表現パターンの解説はよく見かけるのですが、それを実際にどう使うかという情報が不足していると感じたので、一部だけですが取り上げてみました。こちらの練習不足でぎこちないプレゼントなってしまい申し訳なかったです。 補足ですが、if ((match = re.exec(str)))、while ((match = re.exec(str))) のように条件式を丸括弧でくくっているのは、それが代入式であることを強調するためです。SpiderMonkey では if (match = re.exec(str)) などと書くと、「等値比較 (==) を代

  • ゆの in JavaScript 1.8: Days on the Moon

    ゆの in Ruby - 冬通りに消え行く制服ガールは、夢物語にリアルを求めない。 - subtech ゆの in Squeak Smalltalk - sumim’s smalltalking-tos アニメひだまりスケッチを 2 話で切ってしまった私が通りますよ。 String.prototype .\u306F\u3088\u3044\u4F5C\u54C1\u3067\u3057\u305F = function () this.substring(0, 4); var o = 0; var X = { valueOf: function () { var _ = arguments.callee.caller; _._ += "スケッチブック ~full color's~".はよい作品でした (o^_^o); _._ += _.arguments[0]; return (this

  • Greasemonkey スクリプトとイベントで通信: Days on the Moon

    「Greasemonkeyスクリプトとウインドウ間で安全に通信する」にて、DOM イベントを用いた Web ページと Greasemonkey スクリプトとの通信について述べられています。そちらでは dispatchEvent メソッドの返り値による 1 bit 通信に触れていますが、やはりもっと自由にデータをやり取りしたいもの。そのためにはどのような方法があるでしょうか。 独自プロパティ 真っ先に思いつくのは、Web ページ側でイベントオブジェクトを作成した際、独自プロパティを追加する方法ですが、これはだめです。Greasemonkey スクリプト側ではイベントオブジェクトの独自プロパティを取得できません。event.wrappedJSObject.myProperty のように wrappedJSObject を介せば取得できますが、せっかく安全のため Firefox 側でラッパーに包

  • 1