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