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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

Q&A

解決済

3回答

1359閲覧

JavaScriptで作成した検索機能がスマートフォン環境下で表示されません

退会済みユーザー

退会済みユーザー

総合スコア0

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

0グッド

0クリップ

投稿2017/08/22 10:25

HTML5でレスポンシブ対応のwebサイトを作成しているのですが、javascriptを用いて作成した検索ボックスが、スマートフォン環境下で確認した時だけ表示されません。
PCではIE、chrome、safariなど主要ブラウザ全てで表示され、検索ボックスとして意図した通りの動作をするのですが、スマートフォン環境で見た際にはiOS、Androidのどのブラウザでも下記のソース部分が表示されず、解決方法が分からない状態です。

html

1<div class="searchInput"> 2 <script type="text/javascript"><!-- 3 if (navigator.platform.indexOf("Win") != -1) { 4 document.write('<div>キーワード検索&nbsp;<input name="keyword" id="keyword" type="text" size="13" onKeyDown="Ser_Ent(document.getElementById(\'keyword\').value,event,\'\')"><a href="javascript:SearchText(document.getElementById(\'keyword\').value,\'\');" onClick="javascript:SearchText(document.getElementById(\'keyword\').value,\'\');">&nbsp;<img src="'+forDirectoryPath()+'common\/images\/int_search_grn.png" width="20" height="20" alt="キーワード検索" class="iconP"><\/a><\/div>'); 5 }else { 6 i=0; 7 if (navigator.plugins[i].filename.indexOf(".") >= 0) { 8 document.write('<div>キーワード検索&nbsp;<input name="keyword" id="keyword" type="text" size="13" onKeyDown="Ser_Ent(document.getElementById(\'keyword\').value,event,\'\')"><a href="javascript:SearchText(document.getElementById(\'keyword\').value,\'\');" onClick="javascript:SearchText(document.getElementById(\'keyword\').value,\'\');">&nbsp;<img src="'+forDirectoryPath()+'common\/images\/int_search_grn.png" width="20" height="20" alt="キーワード検索" class="iconP"><\/a><\/div>'); 9 }else { 10 document.write('<div id="searchInput" style="display:none"><\/div>'); 11 } 12 } 13 --></script>

他の箇所で使っているJavaScriptはスマートフォン環境下でもきちんと動作をしているため、JavaScript自体が全く使えない状況ではないようです。
また、この表記はXHTML1.0で書かれたソースを流用しているため、その辺りが原因かとも思いましたが、PC環境下できちんと動作している分、どこに原因があるのか、どこから何を試してみるべきかわからない状態です。

webページ制作についてはほとんど初心者なため、是非皆様のお力をお借りしたいです。
何か思い当たる事柄について、些細なことでもいいのでコメントをいただけると助かります。
どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

原因はほかの方が書いてくださっていますので別のことを。

XHTML1.0ということで、"application/xhtml+xml"で出力されていると思いますが、これではdocument.write()が動きません。
ほかの方法をお勧めします。

HTML5においても非推奨です。
https://www.w3.org/TR/html/webappapis.html#documentwrite

投稿2017/08/23 05:21

x_x

総合スコア13749

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

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

退会済みユーザー

退会済みユーザー

2017/08/24 12:59

回答ありがとうございました。原因が分かり、やっと対策法が見えてきました。 他の方の回答も参考に、自身でもいろいろ試してみたいと思います。 この度は、本当にありがとうございました。
guest

0

ベストアンサー

document.writeの行が長いので何をやっているのかがわかりづらいですが、動きをわかりやすくするためにコードを簡略化してみますと、

js

1if (navigator.platform.indexOf("Win") != -1) { // 条件1 2 document.write(/* HTML(1) */); 3} 4else { 5 i = 0; 6 if (navigator.plugins[i].filename.indexOf(".") >= 0) { // 条件2 7 document.write(/* HTML(2) */); 8} 9else { 10 document.write('<div id="searchInput" style="display:none"><\/div>'); 11}

といった感じになります。つまり、

  • 条件1に合致すればHTML(1)を追加し、
  • 条件1に合致せず条件2に合致すればHTML(2)を追加し、
  • 条件1,2どちらにも合致しない場合は<div></div>を追加するが何も表示しない

ということになります。

条件1は、navigator.platformに文字列Winが含まれていればtrue、というものですので、一般的には、「Windowsであれば」という扱いになります。よって、iOS, Android, Linux, Macはいずれも当てはまりません。

条件2は、i = 0ですので、navigator.plugins[0]で示されるプラグインのファイル名に.(ピリオド)が含まれていればtrue、となります。(なぜi = 0しかチェックしないのか、等、意図が今ひとつ不明ですが、可能な限り推測すると、)恐らく、「プラグインがインストールされていれば」ということになるのではと推察されます。よって、通常はプラグインをインストールすることのないiOSやAndroidでは当てはまりません。

よって、少なくともiOSやAndroidでは条件1,2いずれにも当てはまらないため、最後のelse、つまり非表示の<div>タグが追加されて終わることとなります。(なお、プラグインをインストールしていないMac, Linux等でも同じ結果になります。)

もし、プラットフォーム(Windows, Mac, Linux, iOS, Android, 等)やプラグインの有無等を問わず検索ボックスを追加したいということで、条件判断が不要となるようであれば、

js

1<div class="searchInput"> 2 <div>キーワード検索&nbsp;<input name="keyword" id="keyword" type="text" size="13" onKeyDown="Ser_Ent(document.getElementById(\'keyword\').value,event,\'\')"><a href="javascript:SearchText(document.getElementById(\'keyword\').value,\'\');" onClick="javascript:SearchText(document.getElementById(\'keyword\').value,\'\');">&nbsp;<img src="'+forDirectoryPath()+'common\/images\/int_search_grn.png" width="20" height="20" alt="キーワード検索" class="iconP"><\/a><\/div> 3</div>

で済むようにも思えます。

投稿2017/08/23 01:23

othersight

総合スコア356

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

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

退会済みユーザー

退会済みユーザー

2017/08/24 12:58

非常に丁寧に説明いただき、大変勉強になる回答でした。 まだまだ勉強中の身ではありますが、少しずつ自分の中で使える技術にしていけるよう頑張ります。 この度は、本当にありがとうございました。
guest

0

標準ではない実装かつスマートフォン用ブラウザにはそもそも必要のない機能なので、そういう挙動になるのでは。

【window.navigator.plugins - Web API インターフェイス | MDN】
https://developer.mozilla.org/ja/docs/Web/API/NavigatorPlugins/plugins

非標準

This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.


コードについては document.write を使うころの実装なので、何を除外したかったのかがわかりませんが、下記コードで十分ではないでしょうか。

HTML

1<script type="text/javascript"> 2document.write('<div>キーワード検索&nbsp;<input name="keyword" id="keyword" type="text" size="13" onKeyDown="Ser_Ent(document.getElementById(\'keyword\').value,event,\'\')"><a href="javascript:SearchText(document.getElementById(\'keyword\').value,\'\');" onClick="javascript:SearchText(document.getElementById(\'keyword\').value,\'\');">&nbsp;<img src="'+forDirectoryPath()+'common\/images\/int_search_grn.png" width="20" height="20" alt="キーワード検索" class="iconP"><\/a><\/div>'); 3</script>

投稿2017/08/22 11:05

kei344

総合スコア69407

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

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

退会済みユーザー

退会済みユーザー

2017/08/24 13:03

回答ありがとうございました。昔のコードをそのまま引っ張ってきていましたが、皆様の回答で解決方法が見つかりました。この度は、本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問