« Firefox+Flash 11.3のProtectedMode(保護モード)の問題 | トップページ | デュアルモニター(複数モニター)+Google ChromeでYoutubeのフルスクリーンがすぐに解除される場合 »

2012/08/02

デュアルモニターをJavaScriptで検出する方法は存在する?

仕事の関係で、デュアルモニター(複数モニター)でのテストが必要となり、AmazonでI-O DATA USB接続外付グラフィックアダプター 「USBグラフィック」 デジタル&アナログ対応モデル USB-RGB/D2を買いました。また、モニターはそれまで19型の1440×900のモニターを使っていたのですが、I-O DATA LEDバックライト採用 超解像技術搭載 21.5型ワイド液晶ディスプレイ LCD-MF224XBRを買ったのですが、モニターの高さはちょうど同じぐらいです。解像度は1920×1080に跳ね上がったので、かなり広く感じます。

仕事の内容には直接は役立った無かったのですが、ただ今まで知らなかったことがたくさん分かりました。また、確かに複数のモニターがあると、IEとFirefoxでの同時テストなどでも役立ちそうです。

JavaScriptでデュアルモニターかどうかを判断する方法についていろいろ調べてみましたが、よく分かりませんでした。デュアルモニターかどうかを判断する必要十分条件をJavaScriptで求めることは不可能かもしれません。

ただし、「少なくとも、この条件を満たせば、デュアルモニターを使っている可能性が高いだろう」という十分条件は求められそうです。

  • (Aパターン)window.screenLeft(IE/Google Chrome用)、window.screenX(Firefox用)を調べて、マイナスの値であれば、デュアルモニターである。
    (メインモニターが右側にあり、左のサブモニターにブラウザ・ウインドウがある場合など。)

  • (Bパターン)window.screenLeft(IE/Google Chrome用)、window.screenX(Firefox用)を調べて、screen.widthと比較して、screen.widthの値より大きければ、デュアルモニターである。
    (メインモニターが左側にあり、右のサブモニターにブラウザ・ウインドウがある場合など。)
というような感じです。

ただし、少し調べれば分かりますが、Firefoxの場合、モニターが一つでも左上の端にブラウザ・ウインドウが位置すると、x座標が-8、y座標が-8になるようです。ですから、その点を考慮したJavaScriptが下記になります。






screen.widthやscreen.heightで求められるモニターの解像度は、IEと非IE系ブラウザ(FirefoxやGoogle Chrome)などでは挙動が違うみたいです。IEでは、ブラウザ・ウインドウが位置する場所に限らず、つまり、メインモニター上に存在しようが、サブモニター上に存在しようが、あくまでもメインモニターで使用されているモニターの解像度を表示します。

一方、FirefoxやGoogle Chromeなどの場合は、そのブラウザ・ウインドウが存在するモニターの解像度です。両モニターにまたがって存在する場合は、「だいたい」どちらのウインドウに比重が大きくかかっているかで、どちらのモニターの解像度を表示するかを決まているみたいです。IEの挙動はOSと一体化したブラウザであることが影響しているのかもしれません。

また、Aパターン・Bパターン、どちらのパターンが多いかというと、Bパターンが1.5倍ぐらい多かったです。つまり、メインモニターが左側にあり、右のサブモニターにブラウザ・ウインドウがある場合「など」です。「など」としているのは、いろいろな理由で、物理的に右か左かは本当のところはわからないためです。

▼上記JavaScriptコードの限界点
・上記コードは、デュアルモニターであったとしても、普通に、メインのモニターにウインドウを表示させている限り、検出不可能です。しかし、私が調べたところ、上記コードでも約4%はデュアルモニターであることは確実という結果になりました。ですから、実際はそれ以上なのでしょう。これはかなり意外でした、私としては。

▼応用編
デュアルモニターの存在を考えた場合、JavaScriptのwindow.openもwindow.screenLeftやwindow.screenXを考慮した方が良いことになります。そうでないと、サブのモニターに表示したブラウザ・ウインドウのリンクをクリックしたのに、メインのモニターにサブウインドウが表示されるみたいなことが起こります。

Yahoo! Japan(デュアルモニターの存在を一切考慮しない、一般的なJavaScript・window.open)

Yahoo! Japan(デュアルモニターかどうかを考慮したJavaScript・window.open)

上記コードで、サブモニターに親ウインドウが存在する場合は、サブモニターに子ウインドウが表示されますが、サブモニターの(0,0)の座標に表示されるとは限らないようなので、もう少し改良しないといけないみたいです。

|

« Firefox+Flash 11.3のProtectedMode(保護モード)の問題 | トップページ | デュアルモニター(複数モニター)+Google ChromeでYoutubeのフルスクリーンがすぐに解除される場合 »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/67411/55337416

この記事へのトラックバック一覧です: デュアルモニターをJavaScriptで検出する方法は存在する?:

« Firefox+Flash 11.3のProtectedMode(保護モード)の問題 | トップページ | デュアルモニター(複数モニター)+Google ChromeでYoutubeのフルスクリーンがすぐに解除される場合 »