タグ

JavaScriptとTipsに関するwackyのブックマーク (320)

  • 最速インターフェース研究会 :: JavaScriptでDebugScreenを表示する

    デモ、IEかFirefox http://la.ma.la/misc/js/debugscreen/ IEとFirefoxではwindow.onerrorを設定するとJavaScript全体のエラーを補足できます。さらに返値をtrueにすると標準のエラーダイアログを抑制できます。 簡単なサンプルはこんな感じ。 window.onerror = function(mes,file,num){ alert([ "file : " + file, "line : " + num, "message : " + mes ].join("\n")); return true; } あまり細かい情報を取得できるわけではないので、例外処理に使ったりはできないのですが、エラーメッセージを親切にしたりできるかもしれません。 そんなわけで、ファイル名と行番号わかるなら自分自身をXMLHttpRequestで受

    wacky
    wacky 2006/01/15
    JavaScriptエラー時に独自のデバッグ画面を表示するサンプル。window.onerrorでエラーを補足、XMLHttpRequestでソースを取得して該当行付近を表示。なるほどー。
  • IT戦記 - 複雑で重くなった JavaScript を超高速化する方法。

    以下のスクリプトを他のすべてのスクリプトよりも前に読み込む。 var nativeSetInterval = window.setInterval; _setInterval = {}; window.setInterval = function(process, delay) { var entry; if(typeof process == 'string') { entry = new _setInterval.Entry(function(){eval(process);}, delay); } else if(typeof process == 'function') { entry = new _setInterval.Entry(process, delay); } else { throw Error('第一引数が不正です。'); } var id = _setInterv

    IT戦記 - 複雑で重くなった JavaScript を超高速化する方法。
    wacky
    wacky 2006/01/06
    window.setIntervalメソッドをフックして自前のキューで処理することにより、setIntervalが並列実行された時のCPU使用率を下げる・・・のかなぁ? → 追記:『setIntervalを複数登録すると Javascript は遅くなる』とのこと。
  • memo.xight.org - JavaScriptのデバッグ方法

    Venkman JavaScript Debugger FirefoxのExtention. JSUnit メソッド 内容 assert([コメント], booleanValue) assertTrueと同じ assertTrue([コメント], booleanValue) booleanValueがtrueか assertFalse([コメント], booleanValue) booleanValueがfalseか assertEquals([コメント], value1, value2) value1 == value2か assertNotEquals([コメント], value1, value2) value1 != value2か assertNull([コメント], value) value == nullか assertNotNull([コメント], value) value

    wacky
    wacky 2006/01/05
    JavaScriptのデバッグに関するリンク集。デバッグ用ライブラリやツールなど。
  • Collection & Copy - ドキュメントのロード完了に合わせて関数を実行する

    JavaScriptページロード時にプログラムを実行するためにwindow.onloadやbody.onloadがしばしば使われる。しかし、ページ内に大きな画像が存在する場合などは、画像のロードを待つため、実行が遅れてしまう。「ドキュメントのロードが終わっていて、かつ、イメージのロードが完了する前」に関数を実行する方法のリンク2つの要点をコピー。 script要素defer、DOMContentLoadedイベントを利用する方法The window.onload Problem - Solved! Firefoxの場合非公式のイベントハンドラ、DOMContentLoadedを利用する。 // for Mozilla browsersif (document.addEventListener) { document.addEventListener("DOMContentLoaded",

    wacky
    wacky 2006/01/05
    『ドキュメントのロードが完了していて、かつイメージのロードが完了する前』に関数を実行する方法。script要素のdefer と DOMContentLoadedイベント。
  • 最速インターフェース研究会 :: Safariでreplace callback のエミュレーション

    replaceメソッドをhackしてsafariでもreplace callbackを使えるようにしてみた。Safari バージョン 2.0.2(416.13)で上手く動いたそうです。手元に環境が無いので細かい検証はできませんが、とりあえず。 http://la.ma.la/misc/js/replace_callback/ 解説JavaScriptのString#replaceメソッドは文字列を置換して新しい文字列を返すメソッドですが、第二引数に置換後の文字列を指定する代わりにfunctionオブジェクトを渡してやると、Perlでいうところのeオプションみたいなことができます。 // 大文字を小文字に、小文字を大文字に String.prototype.swapcase = function(){ return this.replace(/([a-z])|([A-Z])/g,functi

    wacky
    wacky 2005/12/30
    String.replace()メソッドにFunctionオブジェクトを渡す手法をSafariでも使えるようにする。
  • prototype.jsのものすごく簡単な使い方。 : blog.nomadscafe.jp

    prototype.jsのものすごく簡単な使い方。 はてなダイアリーの方にprototype.jsでHTMLを汚さないロールオーバースクリプトというエントリーを書いたのだが、prototype.jsの入手方法やらすごく簡単な使い方がないようなので、書いてみます。 prototype.jsはJavaScriptのライブラリ(中身はJavaScriptです)で、これを使うとJavaScriptを組むのがかなり楽になるというものです。話題のAjaxのプログラミングも簡単にできます。 ライブラリは、 http://prototype.conio.net/ からダウンロードできますが、TOPページにあるファイルはちょっと古いものなので、Browse the darcs repositoryというリンクを辿り、 http://dev.conio.net/repos/prototype/dist/ から

    wacky
    wacky 2005/12/28
    prototype.jsのAjax.Updaterで超お手軽Ajax体験。onclick一つ書くだけなので、Ajaxコーディング初心者にも優しい。こりゃイイや。
  • DOM オブジェクトとメモリリーク: Days on the Moon

    IE でのメモリリーク ちょこちょこと紹介されているので知っている人も多いと思うが、IE には DOM ノードに絡んだメモリリークの問題がある。これに関しては Microsoft 自身の記事である「Understanding and Solving Internet Explorer Leak Patterns」に詳しいが、簡単にいえば DOM ノードオブジェクトに関する循環参照を作ると、IE を終了させるまでそのオブジェクトが解放されないというものだ。記事によればメモリリークには以下のようなパターンがあるという。 1. 単純な循環参照 ある DOM ノードオブジェクトのプロパティをたどっていくと自分自身に行き着く場合。以下のようなパターンが考えられる。 element.property == element element1.property1 == element2, element2

    wacky
    wacky 2005/12/04
    IEのDOMノードにからんだメモリリーク発生の3つのパターンとその解決方法。クロージャ使うときは注意が必要。
  • TechTarget - Global Network of Information Technology Websites and Contributors

    Looking for information about Informa TechTarget products and services? The commercial homepage has moved. Visit Informa TechTarget News 01 Aug 2025 / Policy & regulation Trump urges top drugmakers to cut U.S. prescription drug costs Trump increases pressure on 17 of the world's largest drug makers to lower U.S. prescription drug prices in 60 days, ahead of proposed tariffs and pharmaceutical impo

    TechTarget - Global Network of Information Technology Websites and Contributors
    wacky
    wacky 2005/12/04
    prototype.jsの使い方を学ぶのに役立つページをいくつか紹介。(英語)
  • #!shebang.jp : Yellow Fade Technique

    November 14, 200515:50 Yellow Fade Technique カテゴリ技術ネタ 最近、よく見かけるので prototype.js 使って実装してみる。 fat.js ってもっと便利なやつもあるけど、単純にやってる事がよく分かるように実装してみたつもり。 エフェクトをかけたい要素の id を指定して、 <script type="text/javascript"> new Fade('id'); </script> みたいな感じで使う。 var Fade = Class.create(); Fade.Colors = ['#ffff99', '#ffffaa', '#ffffbb', '#ffffcc', '#ffffdd', '#ffffee', '#ffffff',]; Fade.prototype = { initialize: function(eleme

    wacky
    wacky 2005/11/14
    prototype.jsでYellow Fade Techniqueを実装。new Fade(要素id); のように利用する。
  • Bookmarklet - ブックマークレットを作成する際のポイント

    Updated: 2003-09-28 05:44:07+0900 [Home] 値を返してはいけない 値を返す式を使うとページを移動してしまいます。 javascript:contents='aaa' これならOK javascript:void(contents='aaa') 変数はページ内でグローバルになってしまう varをつけても、ブックマークレットで使用した変数は、ページ内でグローバルになってしまいます。表示中のページの動作や、他のブックマークレットの動作を変えてしまう可能性があります。 javascript:var contents='abc' javascript:var contents='123' 上のリンクをクリックしたあと、以下をクリックするとcontentsの中身が変わっているのが見えます。 javascript:alert(contents) これはページに書かれ

    wacky
    wacky 2005/10/24
    「値を返してはいけない」、「変数はページ内でグローバルになる」などブックマークレットを作成する上で知っておくべきこと。
  • 最速インターフェース研究会 :: 実践JavaScriptリファクタリング、その2

    連載すんの? リファクタリングとか嘘で実は実践ビルトインオブジェクトハックなんだけど。 例題 配列 a = [3,5,4,2,1] から一番小さな値と、一番大きな値を取り出すにはどうすればいいか。 多分昔はこんな風に書いてたと思うんですよ。 a = [3,5,4,2,1]; for(i=0;i<a.length;i++){ if(i == 0){ min = a[0]; max = a[0]; } if(min > a[i]){min = a[i]} if(max < a[i]){max = a[i]} } 模範解答として、後先考えないやり方を提示しておく。 a = [3,5,4,2,1]; min = a.sort().shift();// 1 max = a.sort().pop(); // 5 短い。ただし、これをやるとaの内容は並べ替えられて最初と最後の要素が取り除かれる。 a /

    wacky
    wacky 2005/10/07
    ArrayオブジェクトHacks。配列の内容をコピー、内容を破壊しないソートなど。applyメソッドか・・・奥が深い。
  • 最速インターフェース研究会 :: 実践JavaScriptリファクタリング

    同じ事をやるにも、いろんな書き方があるわけでいかにして短くてわかりやすいコードを書くかというノウハウを紹介します。 例として"abcde"を80回繰り返した文字列を作るとして実際に自分のコーディングスタイルがどんな風に変化していったのか、という。 短くなるのは確かなんだけどわかりやすいかというと、人によるかもしれない。 グローバル関数を定義2年前なら、多分こういう具合だった。 //ふつうに関数として定義する function x(str,num){ var tmp = ""; for(var i=0;i<num;i++){ tmp += str; } return tmp; } x("abcde",80) Stringのメソッドとして定義1年前だとこんな感じ。 //Stringのメソッドとして定義する String.prototype.x = function(num){ var tmp

    wacky
    wacky 2005/10/06
    JavaScriptコードを短くするテクニック。でもfor文の初期化時にループ変数以外を宣言するのはちょっとなぁ…。
  • ほその日記 - フォームが変更された事を知る

    今日の帰り道、小腹すいたなぁ…なんだか分からないけどむしょーにカップラーメンべたい!!と思った時には、自宅から一番近いコンビニを通り過ぎていて、戻るのもめんどくさかったので新たなコンビニを探す旅に出ました。 駅から自宅に向かう道を、自宅を通り過ぎて探しに行く事に。いつもは駅方面しか行かないので新しいコンビニができてるかも!?と思って自転車を走らせるとそこには… 130戸のマンションとか、やたらゴージャスな家とか、綺麗な家とか山ほど見知らぬ景色が広がってました!おいおい、自宅から徒歩3分の所がこんなになってたのか!反対方向見るとまだ畑が広がっているというのに、高級っぽい住宅街ができてました。 これなら知らないコンビニがあってもおかしくない!ということでズンズン自転車をこぐと…一瞬で田舎に戻ったorz。開発されてる!と思った地域はほんのちょっとで、少し離れたら見知った景色が広がりだしました

    ほその日記 - フォームが変更された事を知る
    wacky
    wacky 2005/08/11
    Webフォームの部品ごとにonchangeを書くことなく変更を検知。attachEventだけでなくaddEventListenerも併用すべきかと。
  • 最速インターフェース研究会 :: Function.prototypeを拡張して遅延実行を実現する

    JavaScriptにおいて関数というのはFunctionオブジェクトで、他のビルトインオブジェクトと同様に、組み込みのメソッドがある。これがapplyとcallしかないのだけれど、こんな感じに使う。 func.apply(thisObj,arguments) func.call(thisObj,arg1,arg2,arg3) thisObjには、その関数内で「this」として使うオブジェクトを指定する。applyの第二引数はargumentsオブジェクトを指定する。配列か、現在実行中の関数のargumentsオブジェクトを丸ごと別の関数に引き渡せる。つまり引数の長さが良くわかってなくても使える。 callは代わりに func.apply(thisObj,[arg1,arg2,arg3]) と書けるので、実はいらないんじゃないかと思う。 これらは多分、ふつうにJavaScriptを書く上で

    wacky
    wacky 2005/07/31
    setTimeout()を関数のメソッドとして呼び出せるようにするFunctionオブジェクト拡張。applyメソッドの利用例としても。
  • http://obj.shion.sakura.ne.jp/vector/diary/200307.html

    wacky
    wacky 2005/07/26
    addEventListenerが利用できない環境で、onloadなどのイベントに複数のハンドラを割り当てる。クロージャを利用。
  • fladdict.net blog: イベント・ドリブンなJavaScriptのやり方

    Flashでに学ぶ非同期通信のノウハウのって感じのお話。JavaScriptでオブザーバパターンを用いて、イベントドリブンなコード(addEventListener等)をバリバリ書く方法です。 というかFlashで言うところの、mx.events.EventDispatcherクラスの自分なりの移植なわけですけど。 このEventDispatcherクラスを使うと、W3CのDOM3にそれなりに対応した、イベントモデルを自作のJavaScriptのオブジェクトに実装できます。これで素晴らしきイベントドリブンの世界が楽しめます。 function EventDispatcher(){} /** EventDispatcher.initialize( obj ) オブジェクトobjに、W3C DOM3互換のイベント通知機能を追加します。 これによりobjは、onLoad等のイベントを発行すること

    wacky
    wacky 2005/07/21
    JSでオブザーバパターンを用いてイベントドリブンなコードを書く方法。ユーザObjectにイベントモデルを実装。
  • 最速インターフェース研究会 :: prototype.jsのObject汚染を回避する方法

    かなりターゲットの狭いTips。役に立たない。 prototype.jsというRuby on Railsなんかのフレームワークで使われている有名なJavaScriptのライブラリがあって、これが色々と使えそうな処理を綺麗に詰め込んであり、デファクトスタンダート的な地位を確立しているのだけれど、ちょっと微妙だなーと思うところがあって、それはObject.prototypeを拡張してしまう点。 実際の弊害はこういう。 http://d.hatena.ne.jp/nazoking/20050425/1114374966 要は連想配列として使うときに困るって話。 多分prototype.jsはJavaScriptの側でロジックを組むことをあまり想定していないため、この辺の問題にあんまり配慮していないのではないかと思うのだけれど、とりあえず無理やり回避する方法を思いついたので書いてみる。 http:

    wacky
    wacky 2005/07/10
    JavaScriptのTips。Objectのprototype拡張の弊害を無理やり回避する方法、フォント一覧取得、マウスホイール検知。
  • fladdict.net blog: JavaScript でのパッケージの実装方法

    Flashに学ぶAjaxのノウハウとして、プロトタイプベースの言語で擬似パッケージを実装する方法。 実は擬似パッケージの手法はもう3年前ぐらい前にCollin Moock氏によって発案されている。また、AS2のswfファイルをデコンパイルするとわかるが、マクロメディアも採用の安定した手法だ。現状ではFlashのOOPはJavaScriptの数年先を進んでる(と思う)。 net.fladdictパッケージのHogeクラスを作る場合、以下の様に書くことで実装できる。 if (!_global.net) { _global.net = new Object(); } if(!_global.net.fladdict){ _global.net.fladdict = new Object(); } if(!_global.net.fladdict.Hoge){ var local = functi

    wacky
    wacky 2005/07/07
    JavaScriptで擬似パッケージを実現。マクロメディアも採用している手法。
  • [JavaScript]All About

    大学生には、社会人になる心構え、仕事・会社の選び方、選考対策など、満足する就職活動の進め方を解説。社会人には、転職の仕方、職種別の転職ノウハウや派遣、在宅ワークなどの働き方別の働き方ノウハウなどを事例を交えながら分かりやすく解説。

    [JavaScript]All About
    wacky
    wacky 2005/07/03
    高橋登史朗氏によるAll AboutのJavaScriptガイド記事。AjaxやDOM、クロスブラウザ・ライブラリなどを取り扱う。
  • 正規表現のeオプションをJavaScriptでエミュレート

    Perlなどの置換系の正規表現ではeというオプション(フラグ)をつけると、置換後の文字列をプログラム・コードとみなしてくれるわけですが、JavaScriptのreplace()の第一引数で指定する正規表現にはeオプションなどというモノはありません。しかし、replace()の第二引数である置換後の文字列にはStringオブジェクトや文字列リテラル以外にも関数を指定することもできるので、事実上eオプション相当のことが実現できます。エミュレートというのは正確ではない気がするけど気にしない。 具体的には、 var s = "asdf123asdf123456asdf123asdf"; document.write( s.replace( /123/g, function (num, idx, old) { return parseInt(num) + 333; } ) ); という感じ。上記例で

    正規表現のeオプションをJavaScriptでエミュレート
    wacky
    wacky 2005/04/05
    正規表現による置換で、置換後文字列として関数オブジェクトを渡すことができる。