■キー割当表示 [Shift-H] ─ KeyNavi:キーボードを活用して 
ホームページを快適に─
 
ホーム [0] JavaScriptバグ&回避法リスト:1.目次 [1] 5. レイヤー編 ・サイトマップ [Shift-S]

JavaScriptバグ&回避法リスト
 ■ 5. レイヤー編

【このページ内のトピック: 「Ctrl-矢印」でフォーカス移動・「G/T」連打で自動ナビ】
5.1 div要素でabsoluteかrelativeを指定要(NS4)
5.2 レイヤー内のオブジェクトの指定方法に注意(NS4)
5.3 背景色変更がきちんと動作しない(NS4)
5.4 レイヤーに対するdocument.write()が不安定(NS4)
5.5 指定済みの背景をクリア出来ない(Opera6)

「NS,NN=Netscape Navigator」「IE=Internet Explorer」の略です。

 ■ 5.1 div要素でabsoluteかrelativeを指定要(NS4)

Netscape4.xでは他ブラウザと互換性の無い 「<layer>」タグを使うか「<div>」タグに スタイルシートで「position:absolute」か「position:relative」を指定しないと JavaScriptでレイヤーとして処理できません。
オブジェクトとして処理できず各種属性の参照、変更ができません。

各種position指定で実験してみたページ(Netscape向け)

通常の要素(=static配置)はJavaScriptで制御できないので不便です。

また「onmouseover」「onmouseout」ハンドラは 「<div>」内に書いても動作しません。「<layer>」内に記述する必要があります。 「<layer>」を使わない場合は HTMLではなくスクリプトから指定します。

「document.layers["lay1"].captureEvents(Event.MOUSEOVER); document.layers["lay1"].onmouseover=MyFunc;」 或いは 「kl_addhandler(kl_getelem("lay1"),"onmouseover",MyFunc);」とします。

3.3 windowのサイズ変更でCSSレイアウト崩壊(NS4)にも注意!

スタイルシート単独でも相当数のバグがあるので 特に必要がなければ NS4では内容が伝わればよしとするのが得策です。

関連:HTML,CSSバグ&回避法リスト

参考:各ブラウザ使用率(onestat.com 03/07/28発表)によるとNS4は0.6%。
http://www.onestat.com/ html/ aboutus_ pressbox23.html

 ■ 5.2 レイヤー内のオブジェクトの指定方法に注意(NS4)

バグというよりはNetscape4.x特有の独自仕様ですが重要なので追加します。

IEやNetscape6+,Operaなどのブラウザでは オブジェクトがレイヤー内にあるか否かに関わらず 「document.getElementById()」「document.forms」「document.images」 などを利用できます。

一方 Netscape4.xの場合、少し異なる方法が必要です。 例えばレイヤー「lay1」内のレイヤー「lay2」にアクセスするには 「document.layers["lay1"].document.layers["lay2"]」などとなります。 フォームについては 「document.layers["lay1"].document.forms...」などとなります。 画像についても同様。

レイヤーが幾重にも入れ子になっている場合は それらを階層的に全て指定する必要があります。

しかし、 オブジェクトの取得に親レイヤーのIDを控えておくのは面倒です。 そこで再帰的な関数を作ると単一のIDからオブジェクトを取得できます。

KeyNavi内部関数「kl_getelem(id)」ではNetscape4.xの場合も含めて 単一のIDからレイヤーオブジェクトを取得します。
id値からオブジェクト取得:kl_getelem(id) (<JavaScript@KeyNavi.Net)

 ■ 5.3 背景色変更がきちんと動作しない(NS4)

デフォルトで着色されているレイヤーは 背景色の変更「document.layers["id値"].bgColor="色"」 がきちんと反映されないなど様々な問題があります。 またNetscape4.xではスタイルシートによるサイズ指定が きちんと動作しないため着色は一部のみにしか行われません。

<layer>タグと組合わせる、 JavaScriptでclip.widthを指定する、 動的に作成したレイヤーを利用する などによって回避できます。
レイヤーの背景色を指定(<JavaScript@KeyNavi.Net)を参照。

 ■ 5.4 レイヤーに対するdocument.write()が不安定(NS4)

Netscape4.xでは レイヤーに対し 「document.layers[id].document.open()/ write("文字列")/ close()」などとして 文字列を出力できます。

但しスタイルシートの指定内容、他の要素との絡みで 背景色や背景画像が消えたり、大きく表示が崩れることがあります。

ボックスのサイズが中身に合わせて変わることがあります。 この問題を避けるには スタイルシートかJavaScriptでクリップ指定を追加します。 スクリプトで「e.clip.width=...」を予め実行しておくなど工夫してみて下さい。

クリップの指定をした場合 ボックスの中身が溢れてもサイズは変わりません。 また自動改行もされません。途中で改行タグを入れるなど溢れないよう注意。

また「position:relative」のレイヤーでは問題が出やすいので 「position:absolute;」としたレイヤーにのみ出力します。

Netscapeでレイヤーに対して何かを出力する時は 動作テストをきちんとやった方がいいでしょう。

 ■ 5.5 指定済みの背景をクリア出来ない(Opera6)

背景色
Opera6ではスタイルシートやスクリプトで指定した背景色を透明に できません。「null(NS4)」「transparent(IE4+,NS6+,Opera7)」を指定しても 変わりません。そのため 「kl_layer_setbgcolor(id,color,color2)」などと 代替色「color2(略可、デフォルトはwhite)」を指定します。

レイヤーの背景色を指定(<JavaScript@KeyNavi.Net)を参照。

背景画像
Opera6では背景画像に「null(NS4)」や空文字、「url()(IE4+,NS6+,Opera6)」 などを指定しても設定済みの背景画像を無効に出来ません。

存在しない画像を背景に指定すると透明になります。

レイヤーの背景画像を指定(<JavaScript@KeyNavi.Net)

全く異なる方法として、 背景を表現するのに別のレイヤーを用意し下に配置することもできます。 そのレイヤーのvisibilityを「visible/hidden」など変更すれば 確実に透明に変更できます。





ページの先頭へ     

前のページへ
次のページへ
JavaScriptバグ&回避法リスト 目次 【数字キーでアクセス】
例 : 「2.1節」は「2」キーを2回連打して移動。「Q or P」で戻る。
「Ctrl-矢印」でフォーカス移動。
1. 目次
2. 基本編
3. イベント(一般)編
4. イベント(キー入力)編
5. レイヤー編
5.1 div要素でabsoluteかrelativeを指定要(NS4)
5.2 レイヤー内のオブジェクトの指定方法に注意(NS4)
5.3 背景色変更がきちんと動作しない(NS4)
5.4 レイヤーに対するdocument.write()が不安定(NS4)
5.5 指定済みの背景をクリア出来ない(Opera6)
6. その他


ホーム [0] JavaScriptバグ&回避法リスト:1.目次 [1] 5. レイヤー編 ・サイトマップ [Shift-S]
■キー割当表示 [Shift-H] ─ KeyNavi Project 2003 ─