質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

3回答

276閲覧

IEの人にだけメッセージを出したいのにうまくいきません。

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2018/03/24 13:49

<p id="js-ie-message">ああああああああ</p> // IEのバージョン var version; // ブラウザのUAを小文字で取得 var userAgent = window.navigator.userAgent.toLowerCase(); // IEの判定 var isIE = (userAgent.indexOf('msie') >= 0 || userAgent.indexOf('trident') >= 0); // IEのバージョンを取得 if (isIE) { // 正規表現によりUA文字列を配列に分割 var arr = /(msie|rv:?)\s?([\d.]+)/.exec(userAgent); version = (arr) ? arr[2] : ''; } if (isIE === true) { document.getElementById('js-ie-message').innerHtml = 'インターネットエクスプローラーには対応していません。'; }

としたのですがなぜか変化がありません。
どこに問題があるでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

innerHTML

JavaScript

1document.getElementById('js-ie-message').innerHtml = 'インターネットエクスプローラーには対応していません。';

typo

||

JavaScript

1var isIE = (userAgent.indexOf('msie') >= 0 2|| userAgent.indexOf('trident') >= 0);

後述のコードでは、"MSIE", "Trident" のいずれも含まれなかった場合に -1 が格納される事を意識したコードになっていません。

Re: amebatv さん

投稿2018/03/24 14:14

編集2018/03/24 15:48
think49

総合スコア18156

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/03/24 15:34

innerHTMLは確かに間違っていました。ありがとうございます。 もう一つのほうは下記を参考に作っているのですが正直難しくてよくわかりません。 http://jisakupc-technical.info/programing/javascript/4514/ // IEのバージョン var version; // ブラウザのUAを小文字で取得 var userAgent = window.navigator.userAgent.toLowerCase(); // IEの判定 var isIE = (userAgent.indexOf('msie') >= 0 || userAgent.indexOf('trident') >= 0); // IEのバージョンを取得 if (isIE) { // 正規表現によりUA文字列を配列に分割 var arr = /(msie|rv:?)\s?([\d.]+)/.exec(userAgent); version = (arr) ? arr[2] : ''; } こちらをつけばいいのではないのでしょうか? 具体的にどの部分をどうすればいいのか教えていただければ幸いです。
think49

2018/03/24 15:51

|| と String.prototype.indexOf を調べれば、理解できると思います。 > 具体的にどの部分をどうすればいいのか教えていただければ幸いです。 いわゆる丸投げ質問には、質問者がその回答で理解できると判断した場合に回答する事にしています。 丸投げ質問は非推奨事項でもありますので、ご留意ください。 https://teratail.com/help/avoid-asking
退会済みユーザー

退会済みユーザー

2018/03/25 06:47

できました。お二方ありがとうございます。
guest

0

ベストアンサー

IEの機能向上の望みは絶たれている一方, その他のブラウザには日々新たなAPIが追加されていることを鑑みると, モダンブラウザにおいて既に十分普及したはずのAPIの有無でIEか否かは判定できるはずです.

例えばAudioContextオブジェクトは
https://developer.mozilla.org/ja/docs/Web/API/AudioContext
によれば, IEにのみ存在しないようなので…

JavaScript

1const isIE = !(window.AudioContext || window.webkitAudioContext);

としてやれば, そのブラウザがIEである可能性は格段に高くなります.
(もちろん, 旧式のFireFox等でアクセスした場合も引っかかるでしょうが, その場合は機能が足りないものとしてIEと同じ対処で構わないでしょう.)

投稿2018/03/24 16:00

defghi1977

総合スコア4756

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

think49

2018/03/24 16:12

> 十分普及したはずのAPIの有無でIEか否かは判定できるはずです. その方法は、既知のUAには有効ですが、未確認となる未知のUAが存在した場合(もしくは将来的に未知のUAが現われた場合)に破綻する問題があるので、個人的には反対したいところです。 機能検出でUA検出を代替するぐらいなら、UA検出を廃止し、機能検出するアプローチに変更する方が健全だと思います。 基本は機能検出、UA検出は最終手段だと思っています(ブラウザ別にコードを分割するのは保守性が低いため)。
defghi1977

2018/03/24 16:18 編集

> その方法は、既知のUAには有効ですが、未確認となる未知のUAが存在した場合(もしくは将来的に未知のUAが現われた場合)に破綻する問題があるので、個人的には反対したいところです。 理想はそのとおりです. ここで提示した方法は所謂バッドノウハウの類です. とは言え, 実装の簡便さや, 問題が発生した際は”その時考える”というその場しのぎの用途であれば何とかなる…(のか?)
think49

2018/03/24 16:43

”その時考える” が訪れなければ、何とかなる…かな?(訪れたら、泣きましょう) UA改変を危惧するなら、「navigator.appVersion が使えないものか」と考えたことはあります(UAと連動していないか、検証はしていませんが)。
退会済みユーザー

退会済みユーザー

2018/03/25 06:47

できました。お二方ありがとうございます。 >>> asahina1979 2018/03/25 00:18 編集 アロー演算子で書きたいお年頃なんですよきっと w こちらのオタクはロリで性格も最悪なので、どうせ誰も相手をしてくれないからへんたいロリになったんでしょうねwww一生成人には相手にされない
defghi1977

2018/03/25 06:51

> こちらのオタクはロリで性格も最悪なので、どうせ誰も相手をしてくれないからへんたいロリになったんでしょうねwww一生成人には相手にされない あなたのコメントは甚だ不快です.
退会済みユーザー

退会済みユーザー

2018/03/29 13:08 編集

発言を撤回します。
guest

0

いつものIE専用条件文 は廃止されてたのね

とりま IE11, EDGE, FF, GC で確認したけど 以下でもいけそう

if (document.children == undefined) { // IE の処理 } else { // EDGE,FF,GC }

投稿2018/03/24 14:42

編集2018/03/24 16:02
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

think49

2018/03/24 14:49 編集

前質問でも指摘が入っていますが、「条件付きコメント」は IE9 までのサポート、「条件付きコンパイル」は IE10 までのサポートとなっており、IE11 では使用できません。 https://teratail.com/questions/118824
退会済みユーザー

退会済みユーザー

2018/03/24 14:48

おおほんとうだ
think49

2018/03/24 14:49

「条件付きコメント」はIE9までのサポートでした(コメント訂正しました)。
退会済みユーザー

退会済みユーザー

2018/03/24 14:50

IE8,9以前を排除するのはわかるけど、IE11をサポートから外さなきゃいけないようなコードってあるんですかね?
退会済みユーザー

退会済みユーザー

2018/03/24 15:18 編集

アロー演算子で書きたいお年頃なんですよきっと w (トランスパイルとかいってるからきっとアロー演算子)
think49

2018/03/24 15:30 編集

Babelを使用して解決するなら、この質問(UA検出の質問)には至らないような…。 IE11非対応ポリシーの方の理由を聞くと、ほぼ制作側の都合(IE11に対応できない事はないが、最新機能を使えなくて作るのが面倒くさいから嫌)の印象ですが、本質問者はそういうわけでもなさそうです。 正直なところ、アプローチの仕方が間違っている気はしています。
退会済みユーザー

退会済みユーザー

2018/03/24 15:41

ああ、なるほど。前回の質問でこの手のやりとりがあったんですね。 今時、IE11だけ動かないコードなんてあるか?と思って素朴に疑問に思ったんですが(笑) 以前に比べればIE対応に大して苦労しないはずなのに…。
退会済みユーザー

退会済みユーザー

2018/03/24 16:31

Kosuke_Shibuya うちが思い浮かぶのはこのあたり、 (a,b)=>{ return a+b } 前JSの記述じゃないじゃないかときいたらGC/FF では取り入れられてる新仕様とのこと
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問