• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:画面サイズ取得について)

画面サイズ取得方法について教えてください

このQ&Aのポイント
  • アクセスされた際の端末の画面サイズ取得方法について教えてください。
  • 携帯以外では直接サイズを取得できる環境変数はないため、Javascriptを使用して画面のサイズを取得する方法が一般的です。
  • Javascriptで取得した変数をperlで使用する方法はあまり見つかっていませんが、locationではなく他の方法で実現できる可能性もあります。

質問者が選んだベストアンサー

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.5

こんにちは。 No2の方法になります。 画面を表示後、非同期(裏側で)取得した画面サイズをサーバ側にpostします。 サーバ側で値を受け取ったあとその受け取った値に基づいて処理をして結果を返します。 その結果を画面で受け取って画面書き換え等の処理を実施します。 ==== 動作サンプル http://hppg.moe.hm/okwave/qa/q7373761/ 上記ソースを見てもらうと <div id="result"></div> というエリアのみですが画面サイズ等表示されていると思います。 これは画面表示後にdisplay.phpに送信し、display.phpでHTMLを出力します。 それを<div id="result"></div>に反映させています。 disoplay.phpでは送られてきた値を使って自由にHTMLを出力することが可能です。 ※例はPHPですがperlでも同じです。(サーバ側は何でも良い)

hana43
質問者

お礼

ありがとうございます。 これまで教えていただいた事と教えていただいたサイトを参考にして、自分なりに変更を加えたところ、なんとか希望通りの動きが出来るようになりました! 若干まだ小変更は必要ですが、だいたい出来上がりうまくいけそうです。 とても丁寧に、詳しく教えていただき本当にありがとうございました。 今回がきっかけでjavascriptについて調べる事になり、javascriptでは色々奥が深く利用できる方法も多いので、今後色々調べて色んなところで利用出来ればと思います。 この度は本当にありがとうございました。 まだまだ未熟な為、今後まだ質問させていただいた際はよろしくお願いします。 ありがとうございました。

その他の回答 (4)

回答No.4

本来のHTML(というか理想)は、どんな画面でも問題なく表示できるように作るべきですし、 そういう仕組みを備えています。 たとえばCSSのfloat:leftとしておけば、一定サイズ以上であれば横に並び、一定以下であれば縦に並ぶようになります。 JavaScriptを使えば、DOMを使用してドキュメントそのものを書き換えてしまうこともできます。 (これはこれで本来のHTML(=JavaScript未使用環境で閲覧できないのはダメ)ではないのですが。) いずれにしても、サーバーサイドの技術ではどうしようもありません。 改めて書く必要もないと思いますが、 携帯電話に限れば、環境変数(ブラウザ種別)から携帯電話の機種が推測できますから、 サーバーサイドでも、ウインドウサイズやディスプレイサイズ(携帯電話ではイコールになります)を判断できます。 (ブラウザだけを再インストールしたり、アップデートできない機種に限る。現行のすべての携帯電話にそういう機能はないと思います。) アンドロイドスマホなどはブラウザだけのアップデートができない(または制限がある)ので、ある程度推測ができると思いますが、 ソフトウェア環境とハードウェア環境がイコールでないPCでは無理ですね。

hana43
質問者

補足

回答ありがとうございます。 一番ベストなのは携帯のように環境変数から判断出来るのがベストですが、PCやスマホの場合そのような環境変数がないようで、JavaScriptでの対応を検討してみました。 ただ、JavaScriptとcgiの連携がよく分からなかったので、今回質問させていただいた次第です。 スマホとPCについて、ユーザーエージェントで判別をすればサイズの対応表でも自作して…と思いましたが、ユーザーエージェントの偽装なんて簡単ですのでスマホとPCの判別も難しいと思ってそれも意味ないかと。。。 私が無知な分、当初は簡単に考えておりましたが、なかなか難しい方法だったのだと実感してます。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.3

こんにちは。 お役に立てなくて申し訳ございませんが知っている限りではJavaScript以外での取得方法はわかりません。 JavaScriptで値を取得する=一度ブラウザにJavaScriptをロードさせる ということになりますので、どうしても1アクション入ります。 どういった用途かはわかりませんが、非同期で画面サイズを送信して、返ってきた値でページを構成するなりすれば、見た目的には1アクション挟んだようには見えないと思います。

hana43
質問者

補足

ありがとうございます。 お役に立てないなんてとんでもございません。 とても丁寧に回答いただき、感謝いたしております。 非同期で…とありましたが、こちらは以前教えていただきましたサイトのNo.2の内容でしょうか。 私はちょっとやった事がない方法だったのでまだ詳しくは理解出来ていないのですが…。 もしそちらと違う方法でしたら、非同期の内容について教えていただけないでしょうか。 質問ばかりお手数をおかけして申し訳ございませんが、よろしくお願いします。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

こんにちは。 JavaScriptを利用した場合はどうしても画面表示後になりますので1アクションはさむ必要があります。 対象のcgiを呼ぶ前に画面サイズを取得しておくか、画面サイズを取得する画面を挟んであげるしか無いと思います。

hana43
質問者

お礼

ありがとうございます。 やはり、JavaScriptを利用した方法では難しいみたいですね…。 教えていただいたサイトの内容を参考に変更を加えてなんとか出来ないかと色々と試行錯誤しておりますが、根本的に画面が表示されない限り今回の方法では難しいんですね。 何か他に方法はご存知ないでしょうか? JavaScript以外の方法でも構わないので、もし参考になる方法等ご存知でしたらよろしくお願いいたします。 よろしくお願いいたします。

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 ちょっと前に私が回答した内容ですがいかがでしょうか。 http://okwave.jp/qa/q7278429.html No.4の方法でサーバ側に画面サイズを渡しています。 わからないことがあったら補足してください。

hana43
質問者

補足

回答ありがとうございます。 教えていただきましたサイトを見させていただきました。 PHPとの連携でしたが、基本的に同じ内容なので1つずつ見させていただき、テストさせていただきましたが、まだ私の希望しているのとは少し違っております。。。 元々私が希望している方法が実際に出来る事なのかも不明ですが、出来るだけ詳細に説明させていただきますので、もし可能であればご教授いただけないでしょうか。 スクリプトを詳しく書くと長くなるので、簡単に分かりやすく書かせていただきます。 --test.cgi-- if($cg{'id'}==123){    (1)----------下の$wは取得したい画面の横のサイズです。    if($w<1000){      $top=1;    }else{      $top=2;    } }else{    if($cg{'passwd'} eq 'xyz'){      $top=3;    }else{      $top=4;    } } 上記のスクリプトにhttp://○○○.jp/test.cgi?id=123&passwd=abcでアクセスした際に(1)のところで画面のサイズを取得して、そのサイズで判別したいと思ってます。 取得の方法として環境変数で出来れば簡単なのでしょうが、出来ないみたいなのでjavascriptで取得して判別するしかないのかなと考えておりました。 私の希望する内容の説明がうまく伝わるといいのですが、よろしくお願いいたします。

関連するQ&A