🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

3回答

5294閲覧

条件分岐して外部jsファイルを読み込みたい

yMarch

総合スコア17

JavaScript

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2021/01/06 08:40

編集2021/01/06 09:13

条件分岐自体はうまくできたのですが、外部jsファイルをそれぞれ読むことができません。
どうしたらそれぞれ意図したものを表示できるのでしょうか?

###参考にさせていただいたサイト
https://web-yaro.net/jquery/153/
https://blog.10-plate.com/9431/

##やりたいこと
・横幅1024px以下 かつ タブレットorスマホの場合 →SP.js
・横幅1024px以下 かつ PCの場合 → PC.js
・横幅1025px以上 → PC.js

というふうにしたいのです。
2箇所に同じことを書くのはナンセンスかなとおもったため外部ファイルにまとめられないかなと思った次第です。

html

1<head> 2<script src="https://code.jquery.com/jquery-2.1.3.min.js"></script> 3<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script> 4<script src="assets/js/device.js"></script> 5</head>

javascript

1 2//device.js 3 4$(window).on('load resize', function(){ 5var windowWidth = $(window).width(); 6var windowSm = 1024; 7if (windowWidth <= windowSm) { 8var ua = navigator.userAgent; 9//1024以下のタブレット&スマホ 10 if (ua.indexOf('iPhone') > 0 || ua.indexOf('Android') > 0 && ua.indexOf('Mobile') > 0 || ua.indexOf('iPad') > 0 || ua.indexOf('Android') > 0) { 11$.ajax({ 12 url: 'SP.js', 13 dataType: 'script', 14 cache: false 15 }); 16 }else { 17//1024以下のPC 18$.ajax({ 19 url: 'PC.js', 20 dataType: 'script', 21 cache: false 22 }); 23 24 } 25}else{ 26//1025以上のSP 27$.ajax({ 28 url: 'PC.js', 29 dataType: 'script', 30 cache: false 31 }); 32} 33});

当方javascriptは初心者で、調べてもajaxを使用した上記のような書き方しか出てこず
動かなくて困っております。
お力を貸していただけたら幸いです。

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

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

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

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

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

guest

回答3

0

ベストアンサー

javascript

1$(window).on('load resize', function(){

リサイズ時にも読み込むようにしていると、幅を変えた拍子にPC.jsSP.js両方読み込まれる事態となってしまいます。

「両者を1本のファイルに書いて、JavaScript内で幅など条件を見つつ動作するものを切り替えるようにする」方法をおすすめします。

投稿2021/01/06 10:13

maisumakun

総合スコア145977

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

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

yMarch

2021/01/06 14:21

ありがとうございます!なるほどです・・・。 なかなか難しいということが分かりました! ご提案いただいたとおり、js内で条件分岐しながら設定してきたいと思います!
guest

0

それぞれどういう処理が書かれているのか知らないですが、
「動的に読み込むjsファイルを変える」というやり方は選択しないと思います。

「userAgentによる分岐」を1ファイル(要件によって1メソッド)に書きます。

それにAjaxは「リクエストを送って実行結果をレスポンスとして得る」ので、
「読み込む」とは毛色が違います。scriptとしての役割は果たさないのでは。

投稿2021/01/06 08:44

編集2021/01/06 08:45
m.ts10806

総合スコア80875

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

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

yMarch

2021/01/06 08:53

わかりにくくてすみません やりたいことは、 ・横幅1024px以下 かつ タブレットorスマホの場合 →SP.js ・横幅1024px以下 かつ PCの場合 → PC.js ・横幅1025px以上 → PC.js というふうにしたいのですが、 一つのファイルで書こうとすると、「PC.,js」に入る部分に同じことを書かないといけないのかなと。 それだったら外部ファイル化して1つにしたいなという気持ちです。 こういうことは不可能なのでしょうか? ※質問内容修正しました!
m.ts10806

2021/01/06 08:57

>一つのファイルで書こうとすると、「PC.,js」に入る部分に同じことを書かないといけないのかなと。 どういう印象を受けてどういうことをするつもりでされたコメントなのでしょうか。 先に書いたようにAjaxではscriptとしての役割は持てません。 どうしてもファイル分けたいなら、それぞれのUserAgent用のページを作ってそこで読み込ませるか(つまりUserAgentによる振り分けは行わない) それぞれのファイル冒頭にUserAgentチェックを入れて大きなif文で囲うか、いずれかです。
yMarch

2021/01/06 09:06

すみません。当方js詳しくないので、よくわかっていないのですが、 https://web-yaro.net/jquery/153/ ↑こちらを参考にしました。 この書き方は間違いということでしょうか? ちなみに、htmlに<device.js>の内容を直接書いても動かなかったです。。。
m.ts10806

2021/01/06 10:57

>dataType: 'script' あまり使わないものだったので認識がありませんでした。ありがとうございます。
guest

0

js処理は予め読んでおいて、load resizeで変数を切り換えて処理を変えればよいのでは?
結局dataTypeで戻ってくるのはソースとして評価された
テキストデータでしか無いので

投稿2021/01/06 09:02

yambejp

総合スコア116694

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

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

yMarch

2021/01/06 09:25

ありがとうございます。 うーん、難しいですね!笑 参考サイトを見てやってみたのですが、そもそもAjaxでやるというのはよろしくないということなのでしょうか。 変数で切り替えるというのは私にはハードルが高すぎるので、ベタにファイルをそれぞれ用意しようかなぁ…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問