実験「かくされた<object> は使用できるか」

<< 戻る   トップ >>

目的

ふと思いたち、<object> タグを利用して JavaScript レベルのデータロードができないか考えてみた。

予備実験として、<object> タグで HTML 文書の取り込みが可能かどうかを確認した。

<object data="/" type="text/html"></object>

予想通り、全てのブラウザで動作した。

browser動作
Firefox 1.07
Mozilla 1.7.12
Opera 8.51
Konqueror 3.5.0
IE 6.x×

本実験

<object data="/" type="text/html" id="buffer" style="visibility: hidden;"></object>
<script type="text/javascript">
function checkTitle( id ) {
  var obj = document.getElementById( id );
  alert( obj.contentDocument.title );
}
</script>
<button onclick="checkTitle('buffer')">タイトルの抽出</button>

結果

"display: none;" では読み取りをしない。<object> の処理自体がブラウザにとって高負荷の処理であることから、この状態ではドキュメントのリード自体をしないのだろう。"visibility: hidden;" では読み取ることができた。したがって、<object> をウェブドキュメントの読み取りバッファのように使用することは可能である。

ところで、「鴨乃嘴南蛮」でウェブドキュメントのロードと表示に applet を採用したのは、<iframe> がふたつの理由で使えなかったからである。

ひとつは、ブラウザのヒストリ機能にかかわるもので、ダイナミックに <iframe> を生成してドキュメントをロードすると、ヒストリにプッシュされる。しかし、ダイナミックに <ifram> を消去してもヒストリからポップされるわけではない。ヒストリと表示の不整合がおこるわけで、これはやはり <iframe> をダイナミックに生成すると言う使いかたが設計上の想定外であるからだろう。この仕様を非難するつもりはない。

もうひとつは、Opera で iframe の重複機序が一般のエレメントと異なっていると可能性があり、必ずしもウェブウィンドウのベースエレメントの上に配置されない、という問題である。

もし、<object> タグが上記の問題に触れないようならば、<object>をバッファとして使用するだけではなく、そのままウェブウィンドウのコンテンツエレメントとして使用することすら可能だろう (もっとも、その場合、タイトルの取得などロード後の処理に問題があるにはあるのだが)。もっともシンプルなシステムを模索してみたい

補遺

さっそく <object< タグをウェブウィンドウに放りこんでみたが、Frirefox は表示せず。Opera と Konqueror は重複問題を発生した。この方法は使えないか時期早尚であるようだ。

補遺その2

<object> タグをバッファとして使用してみたが、不整合とまで言えないまでもヒストリへのプッシュがある。数ページをロードし、すべてのウィンドウを消去した後にロードした分だけバックしなけれなもとに戻らない動作は不自然である。

結論... というか、教訓

ふと思い立ったりするものではない。


作成: 2006-01-15 11:46:13.0更新: 2006-07-30 10:43:32.0
http://museo-anonimo.jp/nanban/?id=115,http://museo-anonimo.jp/nanban/tr/115