JavaScript
IE 6/7 に表示された Flash で navigateToURL を呼ぶとリファラが取れない (document.referrer === "" //true) 問題の回避方法。 アンカーエレメントをクリックしたことにする アンカーエレメントを作って click イベントを呼べば、リファラを取ることができ…
幾つかの JavaScript ライブラリから、ブラウザ判定部分だけを抜き出してみた。判定基準が userAgent だったり、ブラウザの実装だったり、多種多様で面白い。MooTools はレンダリングエンジンを返す所が他と違う。 Prototype (prototype-1.6.0.2.js) Browser…
はてなブックマークのタグを当てるゲームを作った。タグを入力後、エンターを押して正解なら、次の問題に進む。 はてブ - タグ当てゲーム はてなから引っ張って来た ホットエントリの feed には 4、5 個のタグしか無く、正直なところ、難しすぎてゲームにな…
地味に便利な ActionScript/JavaScript で使えるコメントテクニック。 実行するブロックを切り替える (参考) テスト用のコードを切り替えるときに便利。 //* doHoge(); /*/ doFoo(); //*/ この状態では doHoge() が有効で、先頭行のスラッシュを一つ取ると、…
String.replace の第二引数には、置換後の文字列を返す、独自の関数を指定できることを知った。目的にもよるが、グルーピングを使うときは RegExp.exec を繰り返すよりも使いやすい。 ただし、置換関数に渡される引数が可変で、いくらか複雑なので注意が必要…
JavaScript: The Good Parts を斜め読みしていたら、面白いことが書いてあった。 比較演算子の == や != を、=== と !== の "evil twins" と呼び、"never use the evil twins" という。それはなんでかというと、型が違うときの評価が複雑だから。 以下のコー…
二重否定 (double negation) で簡単に Boolean にキャストできる。 var hoge; !!hoge => false !!0 => false !!null => false !!undefined => false !!"" => false
Date クラスに直感的な (流れるような) インタフェースを実装してみた (ソースコード)。元ネタはこの一枚。 実行サンプルはこんな感じ。 var d = new Date(); => Wed Apr 30 2008 00:00:00 GMT+0900 (JST) d.tomorrow(); => Thu May 01 2008 00:00:00 GMT+09…
Prototype.js の感覚で jQuery の $() を使ったら詰まった。 SWFObject で貼り付けた SWF のメソッドを ExternalInterface で呼び出そうとして、 $("flashMovie").doSomething(); と書いたら、$("flashMovie") には doSomething が無いと言われる。 それもそ…
文章を皮肉っぽくするブックマークレットを作った。 javascript:(function(){document.body.innerHTML=document.body.innerHTML.replace(/([、。])/g,'(笑)$1');})(); このブログを皮肉っぽくする google で検索したら、これよりも高機能なものを見つけた。
JavaScript のランタイムエラーは、起こると処理がそこで停止してしまう。たとえば initModuleA();//エラーが起こる可能性のあるモジュール initModuleB(); initModuleC(); alert("done"); このコードで initModuleA でエラーが起こると、以降、initModuleB …
Helma のデフォルト文字コードは ISO-8859-1 なので、UTF-8 にしたい。結論から言うと app.properties に charset = UTF-8 を書くだけでよい。 アドホックだと感じつつも、hac ファイル全てに res.charset = "UTF8" を追加した上で db.properties に hoge.us…
とあるコードにこのような行があった。 isHoge() && isFoo() && alert("ok"); やっていることは if (isHoge() && isFoo()) { alert("ok"); } なのだが、なるほどと思った。
Dmitri Gaskin による jQuery の解説動画を見た。jQuery の API を一通り解説している。英語も聞き取りやすく勉強になった。 ひとつ驚いたのが、この子が 12 歳だということ。 Dmitri Gaskin drinks code with his cereal for breakfast every morning. He's…
TrimPath Junction を落として NextAction をちょっと触った。が、 NextAction よりも、Junction に付属している Helma に興味がわいたのでそちらを追ってみた。 仕組みもよくわからない状態で、チュートリアル (邦訳) をそのままトレースしてアドレスブック…
文字列と数値の + 演算時による結合について。 console.log(1 + 1 + "hoge" + 1 + 1); //=>2hoge11 console.log((1 + 1 + "hoge") + 1 + 1); //=>2hoge11 console.log(1 + 1 + "hoge" + (1 + 1)); //=>2hoge2 + 演算子の評価は左から右に行われるので、評価…
Amazon.co.jp の商品ページに .com の同一商品へのリンクを追加する Greasemonkey スクリプトを書いた。洋書のレビューや価格を調べるときに便利。元ネタは会社の上司。 AddAmazonDotCom.user.js // ==UserScript== // @name Add Amazon.com URL // @namespa…
Flash で描画したベクター画像を img タグで表示させるデモを作った。肝はサーバプログラムを経由しないところ。 IE 以外のモダンブラウザなら、下の灰色の領域に線を描くと、その下に PNG 画像が現れるはず。 ペイントツール部分は、func09 さんのソースを…
メタプログラミングをすると生産性が上がる。 メタプログラミングには様々な定義があるが、ここでは広めに "無駄なコーディングや手作業を減らす手法" としておく。 以下に、実務 (主に Web のフロントエンド開発) に役立つメタプログラミングの例をいくつか…
JavaScript でリフレクションを利用してみた。肝は arguments.callee.toString(); 以下は、実行されているメソッド名を取得し、引数の数が正しくなければ、メソッド名と正しい引数を出力する例。 function hoge(a, b, c) { var matches = arguments.callee.t…
JavaScript の配列には、集合演算子が無い。仕事で使いそう且つ頭の体操も兼ねて、和集合、差集合、積集合を求めるコードを書いてみた。 //helper method function include(item, target) { for (var i = 0, len = target.length; i < len; i++) { if (item …
前にも書いたが、依然として YUI Compressor の文字コード指定の方法がわからない。結局、泥臭いやり方で対応した。 $ nkf -w hoge_sjis.js > hoge_utf8.js $ java -jar yuicompressor.jar hoge_utf8.js > hoge_utf8_compress.js $ nkf -s hoge_utf8_compres…
JavaScript でスタックトレースを取得したい。結論から言うと、Firebug の trace 関数を呼ぶだけ。 console.trace(); Firebug が無くとも、数行のスクリプトで得られる。 スタックトレースの取得 (callee/caller/argumentsの利用) 上記サイトに掲載されてい…
解決済み YUI Compressor で文字コードを指定できない。 [hoge@foo bar]# java --version java version "1.4.2" gij (GNU libgcj) version 4.1.2 20070626 (Red Hat 4.1.2-14) ... java -jar yuicompressor-2.2.5.jar --charset Shift_JIS hoge.js [INFO] Us…
John Resig が次に出す本が待ち遠しい。 Untold JavaScript Secrets Secrets: Table of Contents 前作『Pro Javascript Techniques』は良書だったが、Ajax/DHTML/OOP にフォーカスしたテクニック本 (タイトル通り) だったので、gotcha 感を得られなかった。 …
3to2 に触発され、JavaScript で SWF ファイルを読み込んで中身を書き換えるデモを作った。 JavaScript で SWF を読み書きする (Firefox 限定) 主な仕組み XmlHttpRequest で SWF バイナリを読み込む (参考) SWF を解析する (3to2 などを参考) Base64 エンコ…
JavaScript の辞書ファイルを導入した。 作者の cooldaemon 氏に足を向けて寝られない。
以下のような巨大なループを実行するとブラウザがフリーズする。 for (var i = 0; i < 100000; i++) { //... } alert("done"); フリーズを回避するには、for ループを、setInterval/setTimeout に置き換えればよい。Flash ならば onEnterFrame イベントも有…
"JavaScript Method Overloading" を読んで、Function.length の存在を知る。 Function.length には、関数に明示的に定義された引数の数が入る。 var hoge = function(foo, bar) { console.log(arguments.length); // => 1 console.log(arguments.callee.len…
Safari 1.x/2.x では、以下のコードは動かない。Safari 3.x では動く。 document.getElementById("hoge").appendChild(new Image()); なので、代わりに createElement を使う。 document.getElementById("hoge").appendChild(document.createElement("img"))…