よろしくお願いします。
JavaScriptの勉強をしているのですが、参考にしている書籍に以下の構文が出てきまして、それの意味が分からなくて悩んでいます。
//MacIE4,5バグ 回避
if(document.all && navigator.appVersion.indexOf('Mac')!=-1)return
//以降に記してあるとおり、OSがMacintoshだった場合に何らかの処置を行うプログラムなのは分かるのですが・・。
navigator.appVersion.indexOf('Mac')!=-1の部分は、「navigator.appVersion.indexOf('Mac')が1ではなかったら、Macユーザーであるということ、で、falseが返されるのでしょうか?
しかし、そもそもnavigatorオブジェクトはブラウザの種類のことではないのか?と混乱してしまっています。
また、document.allがどのような役割を果たしているのかも分かりません。なぜここでdocument.allが出てくるのでしょうか?
どなたか分かる方いらっしゃいましたら、ご教授宜しくお願いします。
No.1ベストアンサー
- 回答日時:
「document.all」は昔はIEにだけ存在するオブジェクトだったのでIEであるかどうかの判定に使われました。
今ではOperaやNetscape等でもIEへの互換の為に存在するのでIEかどうかの判定に使われる事は減ってきています。
IEであるかどうかの判定ではなく、純粋にdocument.allが在る(使える)かという判定にはもちろん使用されますが。
「navigator.appVersion」は確かにブラウザの種類なんですが、実際にはOS名も含まれていたりすのでOSの判定にも使われたりします。
また、 != -1 というのは indexOf関数の結果が 0~なら文字列が見つかったという意味(真偽ではなく、見つかった位置を返す関数)になるのでこういう比較式を使用しています。
(1でなかったらMacユーザという解釈はちょっと違います。)
参考URL:http://www.openspc2.org/JavaScript/ref/
No.2
- 回答日時:
一応コードの意図としては、「Mac 版 IE であれば、(後の処理を行わず)直ちに関数を抜けよ」なのでしょうけど、今だとこれはまずいですね。
navigator... の部分はいいのですが。document.all は元々は IE の独自実装だったため、if (document.all) 、つまり「document.all が存在するか」で IE か否かを判定できたのですが、Opera が IE との互換性を取ると称して document.all を実装してしまったため、このコードだと Mac 版 Opera も抜けてしまいます。
なお、Mozilla, Firefox も確かに document.all を実装しましたが、従来のブラウザ判定用途がそのまま通用するように、if (document.all) には――存在するにも関わらず――偽(false)を返すという変則実装となっています。
navigator.appVersion については、#1さんの通りです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- 洋画 映画 ナビゲーター Flight of the navigator で、 少年がUFOに乗って飛んで 1 2023/07/16 01:28
- JavaScript 追加ボタンを押した際に ok ボタンを押した場合のみ入力値が追記されるようにしたいです 6 2022/05/29 09:57
- Illustrator(イラストレーター) IllustratorのaiファイルがMacのFinderでサムネイル表示されません。 下記の画像の 1 2023/05/15 16:55
- Mac OS PATHを使ってcdなどで簡単に移動できるようになりたい 3 2023/05/13 14:22
- その他(セキュリティ) 写真のMACアドレスは何でしょうか? LINEアンチウイルスをAndroidスマホへインストールし、 2 2022/09/20 21:16
- Windows 10 windows>Mac間のOSライセンス移行 4 2022/06/04 10:28
- ルーター・ネットワーク機器 Linkstation(NAS)がスリープから復帰しない 4 2023/01/10 16:48
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- Mac OS mac OSについて教えてください。 6 2023/02/14 10:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JavaScript window.openで開く...
-
FireFoxのjavascriptで自動でキ...
-
showModalDialogで開いた画面を...
-
javascriptのdocument.allにつ...
-
Javascriptのhtml出力についてa...
-
ラジオボタンでreadonlyの切替え
-
プルダウンを複数使い、ページ...
-
選択によってsubmitボタンの色...
-
DOM要素を削除しても、イベント...
-
Null またはオブジェクトではあ...
-
Javascriptで定期的にF5を押す...
-
javascriptの基本的なことだと...
-
文字を一文字ずつ表示
-
compatModeとは?
-
LaTeX:数式を等号揃えにする方法
-
このjavascriptのif文、条件式...
-
excle VBA とweb上の検索を利用...
-
C#OpenCv V4にのエラーに関する...
-
同じIDで定義した要素の配列を...
-
google apps scriptの終了のさせ方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
codejump 模写コーディングgall...
-
このjavascriptのif文、条件式...
-
文字を一文字ずつ表示
-
DOM要素を削除しても、イベント...
-
FireFoxのjavascriptで自動でキ...
-
Javascriptのhtml出力についてa...
-
excle VBA とweb上の検索を利用...
-
Null またはオブジェクトではあ...
-
webページ上のTabキーの動き
-
XMLでのAttributeを持ったNode...
-
JavaScript window.openで開く...
-
ブラウザのウィンドウサイズに...
-
javascriptのdocument.allにつ...
-
javascriptの基本的なことだと...
-
responseTextについて
-
showModalDialogで開いた画面を...
-
iframeのソースを取得したい
-
removeEventListenerの必要性
-
クリッカブルマップのリンク部...
-
ラジオボタンをクリックしたい
おすすめ情報