JavaScript

前回IEを起動してからの経過時間を表示する

殆どIEを使うことがないので、前回の起動からどれだけ経ってるか調べるBookmarkletを書いてみました。IE8以上で動きます。 javascript:(function(l,k,t,d,_){(d=t-l[k])&&(d=new Date(d))&&alert('前回の起動から'+(((_=d.getUTCMonth())?_+'ヶ月':'')+((_=d…

JsUnit 2.2をGoogle Chromeで使う

最近のGoogle Chromeだとインラインフレームとクロスドメイン制限の関係でJsUnitが動かない。解決法としては、(ローカル)サーバにJsUnitとテストコードを置いて実行する。動作確認した環境 JsUnit 2.2 Google Chrome 10.0.648.204

スタックトレースを取得

Google Chrome 10.0.648.204で確認 方法1: Error#stackプロパティから取得 (ただし文字列形式なのでパースが必要) スタックトレースの出力形式 例外クラス名※1: メッセージ※2 at 例外が発生したメソッド名※3 (メソッドが呼び出されたファイル名:行番号※4:位…

コンソールに出力する文字列を読みやすくする

以下のコードで元の文字列の各文字の位置を分かりやすくするための、補助的な文字列を生成できる 文字幅(=文字数)は元の文字列と同じとなる var s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890'; console.log(s); var t = s.replace(/[\s\S]{1,4}/g, function(…

タグを生成

追記:Bookmarkletとして実行するとm%60の部分がURLデコードされて構文エラーとなってしまうのを修正(とりあえず%の直後に空白を追加) (function(){ /* タイムスタンプを取得 */ javascript: var d = new Date(), o = d.getTimezoneOffset(), m = Math.abs(o…

メソッド内からメソッド名を取得

var o = { f : function(){ for( var i in this ){ if( this[i] == arguments.callee ){ console.log(i); } } } }; o.f(); // f

Bookmarkletで画像ビューア

Bookmarklet用の簡単なビューアVersion0.1(といっても1066文字もある・・・) 機能: 実行すると、ページ内の<img>要素を順番に表示。 <img>要素が<a>要素に囲まれている場合は、<a>要素ごと表示。 Right, Leftで画像切り替え、Escでビューア終了。ビューア終了後、vで再度実</a></a>…

DOMContentLoadedイベントのイベントターゲットを調べる

document.addEventListener('DOMContentLoaded', ...)という記述と window.addEventListener('DOMContentLoaded', ...)という記述を見たので、どっちが正しいのだろうと思い、チェック用のHTML+jsを作成。 結果は、(IEを除く)どのブラウザでもdocumentがイベ…

function文とfunction式の違い

console.log(typeof fn1); // undefined console.log(typeof fn2); // function var fn1 = function(){}; function fn2(){} varによる変数宣言は、スコープに入ったとき変数の追加だけ行われ、宣言のある行で値の代入が行われる。それに対してfunction式で定…

配列の要素を検索

Array#searchとかあっても良さそうだけど、用意されていないようなので適当に定義。 /** * 配列から要素を検索 * @param a0 検索する要素またはテスト関数 * @return number 要素の添字。見つからない場合は-1 */ Array.prototype.search = function(a0) { i…

JavaScriptでコールスタックを取得

arguments.callee.callerが使える環境でのみ動作 コード function getCallStack() { var caller = arguments.callee, ret = []; while( (caller = caller.caller) ) ret.unshift(caller); return ret; } テストBookmarklet javascript:function f(a,b){a=[],…

選択した範囲のURLをまとめて開くBookmarklet

Google Chrome 6.0.472.53 betaで動作確認。 厳密に動作を検証したわけではないので、予期せぬ動作をするかもしれません。 javascript:var r=getSelection().getRangeAt(0),b=r.startContainer,e=r.endContainer,t='childNodes',b=b[t][r.startOffset]||b,e=…

JavaScript言語メモ

プロパティの属性について var宣言文で定義された変数はDontDelete属性がついており、delete演算子で削除することができない。 ArrayインスタンスのlengthプロパティなどはDontEnum属性がついており、for in構文で列挙されない。object.propertyIsEnumelable…

ツイートを読むのに必要な時間を表示するBookmarkletを140文字で書いてみた

元ネタ。 http://tt3000.blog12.fc2.com/blog-entry-15.html たった一行追加するだけでサイトの滞在時間を13.8%伸ばす方法・・・ | IDEA*IDEA http://briancray.com/2010/04/09/estimated-reading-time-web-design/ Twitterの自分のTL(https://twitter.com/home…

整数値を1ずつカウントアップしながら生成

function E(n){ n = n || arguments.callee.n || 0; arguments.callee.n = n+1; return n; } 使い方 var errorCode = { NO_ERROR : E(0), TYPE_ERROR : E(), // 1 RANGE_ERROR : E(), // 2 NETWORK_ERROR : E(100), SERVER_ERROR : E() // 101 }; 2010/05/02…

エラー処理メモ

エラー情報を定義する意味 複数のエラーを一意に識別し、個々のエラーに対し処理を行う エラーの原因特定を助けるため エラー情報 識別子 (整数、識別子(文字列等)、例外クラス名などエラーを区別するのに用いる) メッセージ (人間に対する) データ (原因に…

XPath調査結果

DOMツリーに対してXPathを実行 document.evaluate(xpathExpression, contextNode, namespaceResolver, resultType, result); 引数 意味 xpathExpression XPath式 contextNode 文脈ノード namespaceResolver 名前空間解決関数。HTML文書の場合はnull resultTy…

JavaScriptでプリミティブ型変数の参照渡し

オブジェクトのプロパティにセットして渡せばOK。 var a={ b: 1, c: "d" }; (function(a){ a.b = 2; a.c = "e"; })(a); alert(a.b+'/'+a.c); void(0); Bookmarklet形式 javascript:var a={b:1,c:"d"};(function(a){a.b=2;a.c="e";})(a);alert(a.b+'/'+a.c);v…

Bookmarkletでクワイン

JavaScriptでクワイン(自己コード複製プログラム)って簡単に作れるんじゃないかなって思って書いてみた。 思った通り簡単だった。 javascript:(function (){prompt('','javascript:('+arguments.callee+')()')})() 参考。 クワイン (プログラミング) - Wikip…

でTab文字を入力可能にするBookmarklet作ったよ。

HTMLTextAreaElementのselectionStartメソッドとselectionEndメソッドでカーソル位置を取得して、前後のテキストで\tを挟んでvalueプロパティにセット。 selectionStartメソッドで取得したほうの位置+1をsetSelectionRangeメソッドにセットすればOK。prevent…

isNaNとisFiniteの違いについて

テストコード。 var f=function(a){ alert(a+': '+(!isNaN(a))+', '+isFinite(a)); }; f(0); // true, true f("0"); // true, true f("0x0F"); // true, true f("0hoge"); // false, false f(Number(0)); // true, true f(new Number(0)); // true, true f(I…

===, !==演算子は型変換を行わないというより、参照を比較しているだけ

テストコード。Bookmarklet形式。 javascript: var a=[], b=a; alert( b === [] ); // false alert( b === a ); // true alert( b !== [] ); // true alert( b !== a ); // false void(0);

クリックしたまたはの列に色を付けるBookmarklet

実行後、THタグまたはTDタグをクリックすると、確認のダイアログが出るので、「はい」を押すとその列に色がつきます。 「いいえ」を押した場合は再度クリックしてください。 THタグまたはTDタグ以外をクリックした場合は何もせず処理を終了します。Google Ch…

GoogleChromeのクロスドメイン制限について

GoogleChromeのクロスドメイン制限について。 2009/10/28 04:53 version3.0.195.27 2009/11/7 参照記事の読み間違いをしてました。サーバー側の.jsonに対する設定が必須です。したがって、XHR(XMLHttpRequest)でクロスドメインはできません><ソースコード…