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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

4回答

3565閲覧

jQuery のユーザーエージェント判定がうまく効かない。

donkuri

総合スコア81

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2019/02/27 09:23

編集2019/02/27 10:15

jQuery のユーザーエージェント判定を使って、ipadだけcssをつけたい。

pcやスマホには反映させず、ipadだけcssをつけようと、
jQuery のユーザーエージェント判定を使いましたが全く無反応でした。

どこか間違えているのでしょうか。

該当のソースコード

html

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4<meta charset="UTF-8"> 5<title>テスト</title> 6<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 7<script type="text/javascript"> 8 $(function () { 9 var ua = navigator.userAgent; 10 if (ua.indexOf('iPhone') > 0 || ua.indexOf('Android') > 0 && ua.indexOf('Mobile') > 0) { 11 // スマートフォン用コード 12 } else if (ua.indexOf('iPad') > 0 || ua.indexOf('Android') > 0) { 13 // タブレット用コード 14 $("nav .button").addClass("button--w"); 15 } else { 16 // PC用コード 17 } 18 }) 19</script> 20</head> 21<body> 22 23<style> 24nav .button--w { 25 background: red; 26} 27</style> 28<nav> 29<div class="button">w</div> 30</nav> 31</body> 32</html>

補足情報(FW/ツールのバージョンなど)

ipadの実機ではなく、ブラウザ(safari)のレスポンシブデザインモードで、ipadにして確認しています。

ユーザーエージェントの記述はこちらから持ってきました。
https://qiita.com/torugatoru/items/2dc895d5db7fc839a8bc

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

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

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

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

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

guest

回答4

0

自己解決

私がipadの実機ではなく、ブラウザ(safari)のレスポンシブデザインモードで確認していたのが間違いだったようです。

ブラウザでは動きませんが、ipadの実機では質問文のコードで動くものと思われます。

投稿2019/02/27 11:10

donkuri

総合スコア81

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

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

0

細かい話ですが、

jQuery のユーザーエージェント判定

jQueryにUA判定機能はありません。
navigator.userAgentはブラウザのAPIです。
https://developer.mozilla.org/ja/docs/Web/API/NavigatorID/userAgent

ua.indexOf('iPad') > 0

一応、この判定でも今回のif文は動作するはずですが、String.prototype.indexOf()の使い方が危ういです。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf

値が見つからない場合は -1 を返しますので、> 0だと将来的にiPadが先頭文字列で返ってきた場合にアウトです。

以上を踏まえまして

ipadの実機ではなく、ブラウザ(safari)のレスポンシブデザインモードで、ipadにして確認しています。

実機では大丈夫なのではないでしょうか?
質問のコードではhtmlとjsが読み込まれた後、すぐに実行されるのですが、その時はnavigator.userAgentの値にiPadはないはずです。

ということで、デバッグ方法を覚えると良いかと思います。

例えば以下のコードではどうなりますか?

js

1$(function () { 2 var ua = 'Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1'; 3 if (ua.indexOf('iPhone') > -1 || ua.indexOf('Android') > -1 && ua.indexOf('Mobile') > -1) { 4 // スマートフォン用コード 5 } else if (ua.indexOf('iPad') > -1 || ua.indexOf('Android') > -1) { 6 // タブレット用コード 7 $("nav .button").addClass("button--w"); 8 } else { 9 // PC用コード 10 } 11})

ユーザーエージェント文字列を固定で記述し、動作確認を行います。
問題ないならば、次はnavigator.userAgentの値を疑います。

js

1$(function () { 2 var ua = navigator.userAgent; 3 console.log(ua); 4 以下略

恐らくここで想定外の値がコンソールに表示されていると思います。

投稿2019/02/27 10:31

編集2019/02/27 10:35
so87

総合スコア764

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

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

donkuri

2019/02/27 10:48

ありがとうございます。 頂いたコードで試したところスマホもipadもPCも反映されました。 コンソールに出そうとしましたが何も出ませんでした。 書き方を間違えたでしょうか $(function () { var ua = navigator.userAgent; console.log(ua); })
so87

2019/02/27 11:10

コンソール画面を出した後、リロードするか、コンソールで直接jsを貼り付けて実行してみてください。
donkuri

2019/02/27 11:14

▼w (1) = $2 ▶︎#document ▶︎wプロトタイプ コンソールに直接貼り付けたところ、よくわからないものが出ました。
so87

2019/02/27 23:12

デバッグを真面目にやって下さい。jQuery の即時関数は省くとか多少の工夫はしてくださいませ。console.logでの確認ができないなら、alertを使うなり、document.writeするなり文字列の確認手段などいくらでもありますので、重要なのはuaの値です。 私の意図は、言われたとおりにするのではなく、自分で問題を解決していく力(デバッグ力)が重要だと言うことです。
donkuri

2019/02/27 23:31

ありがとうございます。 コンソールでuaが確認できるのも知りませんでした。 またいじってみてみます。 まだあまりコンソールにも慣れていなくて難しい操作ができませんが いろいろ試行錯誤してみます。
guest

0

iPadのユーザーエージェントには'Mobile'の文字列が含まれています。
http://www13.plala.or.jp/bigdata/user_agent.html

なので、最初のif文で「スマートフォン用コード」の処理に流れてしまい、
addClassが実行されていないと思います。

投稿2019/02/27 09:53

buhoho

総合スコア16

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

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

donkuri

2019/02/27 10:01

ありがとうございます。 最初のところを下記のようにしましたが、ダメでした。 if (ua.indexOf('iPhone') > 0 || ua.indexOf('Android') > 0 ) {
donkuri

2019/02/27 10:08

色々やってみたところ、「スマートフォン用コード」のところにaddClassの行を書くと、 スマホもipadもPCも反映されました。
buhoho

2019/02/27 10:17 編集

すみません。コードには特に問題ないようでした。 手元のSafariにてレスポンシブモードで確認したところ、確かにボタンにスタイルが反映しませんでした。 どうやら、Safariのレスポンシブモードではユーザーエージェントは反映してくれないみたいです。 他のブラウザでユーザーエージェントを変更するアドオンや開発ツールなどを使って確認してみてはいかがでしょうか。
donkuri

2019/02/27 10:26

ありがとうございます。 そうなんですね。やはり実機で確認しないとダメですね。ipad持ってる人を探してみます。 お手数おかけしました。
guest

0

htmlの構造も提示されていないし
JSが無効なのか、CSSが無効なのかわかりません

とりあえずスタティックなCSSで試してみては?

CSS

1<style> 2nav .button--w { 3 background: red; 4} 5</style> 6<nav> 7<div class="button button--w">w</div> 8</nav>

※buttonタグではなくクラスbuttonの要素に追加してますね

投稿2019/02/27 09:37

編集2019/02/27 09:38
yambejp

総合スコア114829

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

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

donkuri

2019/02/27 09:46

ありがとうございます。 すみません。htmlも書けばよかったです。 ひとまず頂いたサンプルでテストしてみます。
donkuri

2019/02/27 09:53

頂いたサンプルを試しましたがダメでした。 質問文にhtml全体をのせました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問