10●.jsファイル内のfunction
杉田さんに教えてもらった(^^)、もしかすると裏技?かもしれないerr回避です。.jsファイルは大変便利で私も多用しはじめていますが、Netscape2.0x及びExplorer3.0では、 その.jsファイルの中のファンクションをHTML内に書くと.js内から呼び出すことが出来なくてエラーが出てしまいます。で、このエラーを出なくする対策のひとつです。こまめにバージョンチェックするより簡単な方法ですね。
<script language="javascript" src="test.js">
function test(){} //.jsファイルの中にも同じファンクションあり
</script>くわしくは、杉田さんのページをみてください(^^)/
9●Netscape4.0b1でimages[index番号]がおかしい
*****このバグは4.0b2では直っています(^^)*****
//これはMacとUNIX版4.0b1が出そろうまでの暫定回避処理です。
12.21に出たWin版4.0b1ですが、document.images配列の[0]がなくて[1]からはじまってしまっているようです。その結果、今まで通りimagesの[0]に何かしようとするとerrがでたり画像が1つずれて表示されてしまったりということになるそうです(なにしろMacではまだ4.0b1がでていないのでメールで知った話です^^;;)。
そこで、これを下記8●イメージ配列についてのimages.lengthカウントと組み合わせて回避してみました。
//document.write('この回避方法の確認にはmassageボ〜ド上で森山さんと杉田さんのご協力を頂きました(_ _)。')などの画像構築の直前で.... il=document.images.length;//ここまでの画像枚数を調べる。 if(navigator.appVersion.charAt(0)==4){il=il+1}
//バージョンが4ならilに1を加える。4以外はそのまま。こうしておいて、
document.images[il+画像構築後何枚目かを表わす数字].src= 画像.gifなど
というわけです。
8●イメージ配列について
Imageオブジェクトを扱う時にdocument.images[index番号]の表記方法は便利なものですが、Scriptの用途によっては注意が必要です。2度と変更しないページならいいんですが、たとえば、後になって新しい画像をそのページに追加しようとすると、追加する画像の場所によっては[index番号]が全部変わってしまってall書き換え(;_;)なんてことになったりします。将来、IEがIMGを扱えるようになったときに、[index番号]のふり方がNetscapeと同じ(読み込み順)ではない可能性も高いので、なるべく 画像名 でScriptを記述しておいたほうが良いかもしれません。と、思いつつ、昨日また失敗してしまったので自戒の意味を込めてここに書いときます。特に汎用性の高い.js外部スクリプトの中では注意しましょう。....(_ _b。と、書きながら気がついた(^^;;んですが、 IMGを構築する直前でIMGlength=document.images.lengthをカウントしておいて、images[IMGlength+xx]としてやればok かも(^^)/。p.s.一応、クリスマスツリーと牛パズルはokでした。
7●指定したサブウィンドウが閉じている時
サブウィンドウを開いた後、意図せずcloseしてしまうことがあります。そんな時にScript中のサブウィンドウへの命令を実行すると、当然、「サブウィンドウがないのに〜(~~;」ということでエラーとなります。これを回避するには、
たとえば、のようにすれば(^^)/okです。けど、自分のページでやってない^^;。
takuw1 = window.open('','w1','toolbar=0,loction=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=1,width=137,height=250')
こういうサブウィンドウだとすると....
function wfl(takuwin){
fl=takuwin.name+''; return fl
}
ウィンドウ名を返すファンクションを作っておくなどして...if(wfl(takuw1)=='w1'){
//サブウィンドウ'w1'が開いている時だけすること
}
以上はNN2.0までの方法ですが、
NN3.0からはwindowが閉じているかどうかを返すclosedというプロパティが
追加されており、if(win1.closed){命令1}else{命令2}だけで分岐ができます。
例:
<SCRIPT>
var win1=window.open('','','width=150,height=200')
win1.document.write("closedのテスト<BR>")
function test(){
if(win1.closed){alert('閉じてるよ')}else{alert('開いてるよ')}
}
</SCRIPT>
<FORM>
<INPUT TYPE="button" VALUE=" 押す "
onClick="test()">
</FORM>
クリックしたときにwindowが開いていると'開いてるよ'、閉じていると'閉じてるよ'
のダイアログが出ます。
Example:
6●MacのbgColorバグ回避//たとえば背景を赤にしたあと.....こうすると、一応なんとかなります(^^;。どうしても、bgColorを使わなきゃならない時のおまじないとしてコピーしてご利用ください。
document.bgColor='red'bwrch=navigator.appVersion.charAt(0)
bwrch4=navigator.appVersion.charAt(4)
bwr=navigator.appVersion
if ((bwrch4!='b'||bwrch<=2||bwrch4=='1'||
bwrch4=='2'||bwrch4=='3'||bwrch4=='4'||
bwrch4=='5')&&bwr.indexOf('Mac')!=-1){
nwin =window.open
("","",'width=800,height=800');
nwin.window.close();}
5●JavaScriptのエラーメッセージをoffにする
どうして、JavaScriptはエラーメッセージを見えないようにできないんだろう?と疑問だったのですが、NS3.xからこの機能が追加されました。
window.onerror=nullというのをスクリプトの最初に入れるだけでokです。
<SCRIPT LANGUAGE="JavaScript">もちろん、エラーメッセージが出ないからといってもエラーがあればスクリプトは機能しません。あの目障りなエラーダイアログをせっかくページを見てくれている人の目にふれないようにしてくれると言うだけです。エラーメッセージが出なくたって、フリーズしたりクラッシュしたりはするわけです。
<!--
window.onerror=null
<!-->
</SCRIPT>
4●カレントフレーム
カレントフレームがparent.frames[0]の時にたとえばparent.frames[0].document.write('どかんがどかん')などと記述するとparent is not defined.というエラーがでます。普通はただdocument.write('どかんがどかん')と書いてやれば問題ないんですが、複数のフレームに同じページを使い回してフレーム間でやりとりする時など(サンプル)はこんな記述が必要になる場合もあるわけです。あまり無いかな^^;。で、そんな時、
if(parent.frames[0].name==self.frames.name)とすれば、このエラーは出なくなります(^^)/。ちょっと、マイナーだったかな^^;。
{
//カレントフレームがparent.frames[0]の時の処理
//たとえば、alert('ここは通れません')など
}
else
{
//parent.frames[0]に行う処理
//たとえばparent.frames[0].document.write('どかんがどかん')
}
3●NS3.x分岐
NS3.xから、かなりの数の命令が追補されています。たとえばImageオブシェクトなども魅力的でこれからおそらくポピュラーになっていくと思われる機能ですが、むきだしで記述すると、IEだけでなくNS2.xでもエラーがでます。NS3.x用の命令を使うときはかならず
if (navigator.appVersion.charAt(0)>=3)などでくくってやることが必要だと思います。
{
//NS3.x用の命令文
}
2●IE分岐
IE3.0のJavaScriptはNetscape2.0に互換のはずなのですが、現状ではまだ残念ながら不完全といわざるを得ません。その結果、これまで正常に機能していたページに入ってもエラーの嵐を巻き起こし、様々なScriptを機能停止に陥らせています。
IE3.0のシェアは今のところ微々たるものに過ぎませんが、せっかく訪れてくれる訪問者のことを思うとScriptを作る際に厳密に分岐する方法も考慮しておく必要があるかもしれません
(めんどくさいけど)。
次のScriptは[JavaHouse:4394](井関さんwrote:)からの引用+改編です。
if (navigator.appName=="Microsoft Internet Explorer")1●未入力.空白入力対策
{
//IEでやること。たとえば、
document.write("このページはNetscape2.x以上でご覧ください。
")
document.write("(IE3.0では安全のためScriptが動作しないように設定してあります。)")
}
else
{
//NSでやること。
}
たとえば計算書などのフォーム入力時に次のようにすると
以下のフォームができあがります。