
以下の一行をすべての JavaScript の前に読み込む /*@cc_on _d=document;eval('var document=_d')@*/ この一行を読み込むことによって IE での document へのアクセスが 5 倍速くなります。 たとえば 以下のように、読み込む前と読み込んだ後を比較してみます。 // Before var date = new Date; for (var i = 0; i < 100000; i++) document; alert(new Date - date); // 643 /*@cc_on _d=document;eval('var document=_d')@*/ // After date = new Date; for (var i = 0; i < 100000; i++) document; alert(new Date -
ふと、思った オブジェクトを作るときに、以下のように型変換用の関数を作っておけば、便利じゃないかと var Hoge = function() { /* ... */ }; Hoge.prototype.number = function() { /* Hoge オブジェクトを数値に変換するコード */ } Hoge.prototype.string = function() { /* Hoge オブジェクトを文字列に変換するコード */ } Hoge.prototype.boolean = function() { /* Hoge オブジェクトを真偽値に変換するコード */ } Hoge.prototype.object = function() { return this } 使う時はこんな感じ if (object[typeof any0]() == any0) { // 比較相手に
サイボウズラボのサイボウズOffice掲示板でやっている 「西尾のひとりごと」スレ(ITmedia)からDjango関係の文章を抽出してみる。実際はこれの4~5倍くらいの書き込みがある。 まとめ記事にしてブログに載せようとか思いつつほったらかしなので、 このまま埋もれてしまうよりは雑然とでも公開した方がいいかと思って。 Lingrログとかとあわせて整理されて Django - UeblogWiki に載るかも知れない。整理するの大変だろうなぁ(自分では整理するのを諦めた) = 西尾のひとりごと 2007-06-18 はてさて 当初の予定では GRINEditは今日でいったん保留にして 金曜日までに露木さんに教えてもらったDjangoのプログラムを参考に 「どう書く」プログラムのプロトタイプを作って、 金曜日からのPython合宿でいろいろ教えてもらって その次の土曜のPython Work
またAjaxianから。 http://ajaxian.com/archives/ies-memory-leak-fix-greatly-exaggerated IEがやってる事はonunloadでDOMを辿って循環参照してる所を消してるだけ。 なので、DOMツリー上にないelementが循環参照していた場合はやっぱりリークする。 実例。 http://grimpoteuthis.org/example/spew.html 4つほど事例があるけど、動的に作成したelementをappendChildしてないとか、または明示的にelem.parentNode.removeChild(elem)してるとかで、DOMを辿っても循環参照しているelementにたどり着けないようになっている。 上の例のような、動的にelementを作っておいてappendChildしないコードを書くことはあんまり無
C++ の特徴のひとつである演算子オーバーロード、その粋を極めたのが Boost Lambda (無名関数) と Boost Spirit (構文解析) ではないかと思っています。JavaScript では無名関数が使えるので Lambda に関しては間に合っているとも言えますが、Spirit はそうも行きません。JavaScript 2 で演算子オーバーロードがサポートされるのならチャレンジしてみようかななどと思ってそれきりになっていました。 しかし、一部でパーサブームが起こっているというのを受け、Perl 6 Rules をつらつらと眺めているうち、正規表現のメタ文字を使えば文法定義をきれいに書けるのではと思い至りました。そこで実際に JavaScript でパーサジェネレータを作り、Spirit にあやかって Gin (ジン) と名づけてみました。 文法定義 正規表現リテラルを使うこ
前回の FirefoxのsetTimeoutの実装 - bits and bytes を書いたときには、はてなブックマークのコメントでご指摘いただいているsetTimeoutとpromptを組み合わせるとpromptが終了する前にタイムアウトハンドラが呼び出される現象を知りませんでした。この現象については [JavaScript]JavaScriptはほんとにシングルスレッドで実行されているのか? に詳しく書かれています。 FirefoxのsetTimeoutの実装 - bits and bytes だと、この現象を説明できないので、どうなっているかはっきりさせるためさらに調べてみました。 setTimeout/prompt現象とは かんたんにこの現象について説明しておきます。FirefoxやIEやOperaでは setTimeout( function () { timeout_hand
Firefoxのソースコードを追っているうちに、たまたま1年遅れで IT戦記 - JavaScript を学ぶ際に一番重要なのに、誤解されがちな setTimeout 系の概念 の裏側がどうなっているかがわかったので、その話を。 タイマーの管理方法 そもそもjavascriptからsetTimeoutを呼ぶと、どういう仕組みで指定した時間後に渡した関数が呼び出されるようになっているのでしょう。Linuxであればsleepのように一定時間後にawakeするという処理は、タイマーリストによって管理されています。カーネルの中にN jiffies(LinuxのOS内時間の単位はjiffyと呼ぶそうです)経過後に実行することリストがあって、カーネルが4msごとに毎回タイマーリストをチェックしてやることがあったときにはそれを実行しています。 FirefoxもLinuxと同じようにタイマーリストみたいな
待望の document.elementFromPoint が Firefox 3.0a8pre にて実装された。仕様は nsIDOMNSDocument.idl に詳しく書いてあるが、おおよそ以下の通りである。 HTML, XUL どちらの document に対しても使用可能 document の左上を (0, 0) とし、位置 (x, y) にある実際に見えている要素を取得する 同一の document 内に存在する要素のみ取得可能。例えばインナーフレーム内の document 内に存在する要素は取得できず、代わりに iframe 要素を返す。 位置 (x, y) が document の可視領域の外側にある場合、null を返す。 XUL document で使用する場合、例えば textbox 要素のスクロールバーのように XBL で生成された無名要素は取得できない。この場合、
背景>< Safari 3 系から DOM Level 3 XPath が実装されました!!!キタコレ!!! Firefox 2 系は DOM Level 3 XPath が実装されている。 Opera 9 系は DOM Level 3 XPath が実装されている。 XPath 1.0 in JavaScript • Cameron McCormack's blog (以下、 xpath.js)なるものがあり Internet Explorer 6 および 7 のような DOM Level 3 XPath を実装していないブラウザでもそれ相当の機能を実装することができる ということで、以下のことを試してみたい!! Safari, Firefox, Opera の XPath のパフォーマンスはどうか? xpath.js のパフォーマンスはどうか? xpath.js は XPath 1.0
JavaScript save the assistants 上記のスライダー、ドラッグを開始して、ウィンドウ外でボタンを離し、再度ウィンドウに戻るとずっと押しっぱなしのおかしな状態になる。これは、たぶんマウスが離されたことを検知できていないため。 WebFXのスライダーは、ちゃんと動く。実装を読んでみた。 Slidebar (WebFX) Firefoxは、文字を選択するようにドラッグを開始すれば、ウィンドウ外でマウスのボタンを外した時にもmouseupが起こせるようだ。これを利用し、見えない文字を選択し、選択状態も見えなくして、スライダーが正常に動作するようにしていた。 簡単なサンプルは以下。スライダに限らず、ドラッグ全般に使えると思う。mouseup以外に、mousemoveなども取れた。 IEの場合は、onlosecaptureイベントを使っていた。WebFX++
従来のはてなダイアリーでは、なにかと制限があってjavascript:的なブックマークレットのリンクを貼り付けるのが不可能でしたが、このたびの 自分のはてなダイアリーにブログパーツを設置できるようになりました - はてなダイアリー日記 により、実現しました http://gmodules.com/ig/creator?synd=open&url=http://ido.nu/ayaya/bookmarklet.xml たとえば 前回 のはこんな感じ かっこ悪いので、border=0 だけは手で修正しました これで、はてダのブックマークレッターの人は、ガンガン貼れると思います
var test; alert(test); "undefined"と表示されます。 だから、変数の値をリフレッシュしたいときは undefinedってのを代入すればいいんだべー、と思って var test = "hoge"; test = undefined; って書いてました。 最近気づいたのですが、 この場合のundefinedは未定義の特別な値ではなく undefiendという宣言も初期化もされていないundefinedという変数を testに代入しているらしいのです。 (結果、未割当な値が代入されるのでtestはundefinedになる) undefinedという概念は存在するんだけど、特別なキーワードではないので undefinedという上書き可能なプロパティのようです。 (id:sawatさんからご指摘いただき修正しました。2007/8/22) undefined = "ho
TOPICS 発行年月日 2007年08月 PRINT LENGTH 704 ISBN 978-4-87311-329-6 原書 JavaScript: The Definitive Guide, Fifth Edition FORMAT 本書は『JavaScript: The Definitive Guide, Fifth Edition』の日本語版です。日本語版出版にあたり、言語解説部分とリファレンス部分に分け、本書はその言語解説部分をまとめたものです。 この第5版では、JavaScript1.5に対応させるため全章の内容を更新し、XMLHTTPRequestオブジェクトでスクリプトからHTTPリクエストに送信する方法、JavaScriptを使ってXMLデータの制御、またJavaScriptによるグラフィックの制御機能についてなど、新しい話題を追加しました。 第1部ではプログラミング言
@nitoyon IE 6 エラーになる?やべー、手元に Windows がないー。ちょっと別のマシン起動してきます。 http://twitter.com/amachang/statuses/191685642 ってのがあったのでonerrorを使ったエラーの検出方法について書いてみたいと思います。 いきなりソースコード var err = function(a,b,c){ var img = new Image(); img.src = 'http://example.com/error.gif?a=' + escape(a) + '&b=' + escape(b) + '&c=' + escape(c); return true; } window.onerror = err; 用意するもの 上のスクリプトをできるだけページの上部に設置 アクセスログを閲覧できる場所に1x1のerro
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く