createContextualFragmentを使うときの注意

javascript:(function(){
var s='hoge';
var range=document.createRange();
range.selectNodeContents(document.body); /*この一行が大事!*/
var df=range.createContextualFragment(s);
document.body.appendChild(df);
})()

エラーが出たり、変なノードが挿入されてしまう理由は、document.createRange() した瞬間には Range の始点が HTMLDocument になるため (以下のブックマークレットで試すと Firefox、Safari、Opera のどれも HTMLDocument が得られる)、div 要素を作成しようとしたとき本来無くてはならないはずの body タグを補完するため。(contextual な実装)

▼参考URL
http://javascript.g.hatena.ne.jp/edvakf/20090223/1235434407