フレーム内のスクリプトにて、親ウィンドウのルート要素下にある要素をコピーし、そのフレーム内のルート要素下に追加しようとするとエラー(もちろんクロスサイトではなく)。
var _parent = window.parent.document;
var oH1 = _parent.getElementsByTagName('H1').item(0);
document.body.appendChild(oH1.cloneNode(true));
IE6/Win では「引数が無効」と言われる。Mozillaは問題なし。
対策は、コピーしたい要素のouterHTMLを読んで、追加先の要素のinnerHTMLに書くとか。この例では最後の行を以下のように:
document.body.innerHTML += oH1.outerHTML;
IEはiframe要素内の文書を別のDOMツリーとして扱い、Mozillaは同じDOMツリーとして扱う、ということだろうか。
以上のような問題を回避しつつ、ページ内ナビゲーションとサイトマップを統合(謎)してみた。文書内容と無関係なサイトマップがくっついてくる(謎)のは無意味なので、ページ内目次もマップに含めてしまおう、と。
サイトマップ最後の課題は、現在地と同時に「どこからやってきたか」に関する情報を取得するにはどうすれば良いかということだけれども、リファラというのはイマイチ信用できない。それなら、サイト内のリソースを参照するアンカーのhref属性にはQueryをつけることにしたらどうだろう。
例えばこのページから、7月後半分にリンクするという場合:
<a href="d20027l.html?agenda.html">agenda(7月後半)</a>
こういう風にすれば、リンク先に渡す情報としてはそこそこ信用できるのではないかな。
やってみるとして実体を変更するのはちょっと不安だから、JavaScriptを使って、document.links[index].href
それぞれに書き加えることになるのか。正規表現でサイト内の別文書を示すURIを判別して? リンクは山ほどあるのに? サイトマップを使わないユーザさんには無関係なのに?
駄目かも。
window.onunload()
時にクッキーにファイル名を書くとか。クッキー依存?
まあ無くても構わないものだし、ちょっとやってみてもいいかな(どうかな)。