WebサイトでJavaScriptのActiveXObjectオブジェクトを使用してハードウェア情報(ディスプレイ数、解像度)を取得し、単一の2画面ジャンプを行う
34456 ワード
前言:最近の2日間の仕事の上で、1つの機能を実現して、友达の阿聡の助けの下で、比較的に良い解決のこの需要です.
B/SのWebサイトでは、ボタンをクリックする必要がある場合、クライアントが接続しているディスプレイ(モニタ)の数に応じて行い、単一の画面をジャンプして新しいページを表示します.
Webサイトであるため、プロジェクトはサービス側に公開され、バックグラウンドでハードウェア情報を読み、サーバのハードウェア情報も読みます.
そこでJSのActiveXObjectオブジェクトを用いて,ハードウェアのディスプレイ(モニタ)情報,例えば数,解像度を読み取ることを考える.
ここではActiveXObjectオブジェクトを使用するが、プロジェクト制限用はIE 9であるため、ウィンドウを開く用はwindowである.open()
ActiveXObjectオブジェクトを作成し、モニタの情報を照会します.
なぜ私が取るのはモニタの解像度で、モニタのNameではありません.これは、取得したデータに基づいて発見されます.1画面の場合、モニタ2の解像度は幅、高さに値があり、モニタ2の解像度は幅、高さはnullです.
これにより、解像度が広く、高さがnullであるか否かにより、単画面であるか否かを判断する.
2画面の時、windowを使うことを発見します.screenLeft、window.screen.width、window.screen.Height、得られたモニタ1、2の幅/高さ
どちらがメイン画面なのか判断します.プログラムがメイン画面で起動したとき、サブ画面で起動したとき.
上のコードでは、新しいウィンドウを開いてジャンプし、私の論理では右から左にジャンプするはずですが、なぜかIE 9ではwindow.Open()は左にずれません.
そこで開いた新しいウィンドウの中でwindowを加速するつもりです.moveTo(-ディスプレイ幅、0);これにより、左にシフトする目的を達成します.
最後に完全なコード、すなわちhtmlページを添付します.
以上のすべてのコードは論理的により良い考え方があり、コード的に大きな最適化がある可能性があります.
また、この文章を読んだり、必要としたりした友达に、自分の意見を発表してください.ありがとうございます.
B/SのWebサイトでは、ボタンをクリックする必要がある場合、クライアントが接続しているディスプレイ(モニタ)の数に応じて行い、単一の画面をジャンプして新しいページを表示します.
Webサイトであるため、プロジェクトはサービス側に公開され、バックグラウンドでハードウェア情報を読み、サーバのハードウェア情報も読みます.
そこでJSのActiveXObjectオブジェクトを用いて,ハードウェアのディスプレイ(モニタ)情報,例えば数,解像度を読み取ることを考える.
ここではActiveXObjectオブジェクトを使用するが、プロジェクト制限用はIE 9であるため、ウィンドウを開く用はwindowである.open()
ActiveXObjectオブジェクトを作成し、モニタの情報を照会します.
var locator = new ActiveXObject("WbemScripting.SWbemLocator");
var service = locator.ConnectServer(".");
//
var xsq = new Enumerator(service.ExecQuery("select * from Win32_DesktopMonitor"));
//
// 2 , 2 ; , 1
// 3 , 。
var xsq1Width;
var xsq1Height;
var xsq2Width;
var xsq2Height;
var i = 1;
for (; !xsq.atEnd() ; xsq.moveNext()) {
if (i == 1) {
xsq1Width = xsq.item().ScreenWidth;
xsq1Height = xsq.item().ScreenHeight;
} else if (i == 2) {
xsq2Width = xsq.item().ScreenWidth;
xsq2Height = xsq.item().ScreenHeight;
}
i++;
}
なぜ私が取るのはモニタの解像度で、モニタのNameではありません.これは、取得したデータに基づいて発見されます.1画面の場合、モニタ2の解像度は幅、高さに値があり、モニタ2の解像度は幅、高さはnullです.
これにより、解像度が広く、高さがnullであるか否かにより、単画面であるか否かを判断する.
//
if (xsq2Width == null && xsq2Height == null) {
window.open("about:blank", "", "top=0,left=0,width=" + xsq1Width + ",height=" + xsq1Height + "");
}
else {
//
}
2画面の時、windowを使うことを発見します.screenLeft、window.screen.width、window.screen.Height、得られたモニタ1、2の幅/高さ
どちらがメイン画面なのか判断します.プログラムがメイン画面で起動したとき、サブ画面で起動したとき.
// 1
if (window.screen.width == xsq1Width && window.screen.height == xsq1Height) {
if (window.screenLeft >= 0 && window.screenLeft < xsq1Width) {
//
window.open("about:blank", "", "top=0,left=" + xsq1Width + ",width=" + xsq2Width + ",height=" + xsq2Height + "");
}
if (window.screenLeft >= xsq1Width && window.screenLeft < (xsq1Width + xsq2Width)) {
//
window.open("about:blank", "", "top=0,left=0,width=" + xsq1Width + ",height=" + xsq1Height + "");
}
}
// 2
if (window.screen.width == xsq2Width && window.screen.height == xsq2Height) {
if (window.screenLeft >= 0 && window.screenLeft < xsq2Width) {
//
// , 。
window.open("about:blank", "", "top=0,left=0,width=" + xsq1Width + ",height=" + xsq1Height + "");
}
if (window.screenLeft >= (-xsq1Width) && window.screenLeft < 0) {
//
var objWin = window.open("about:blank", "", "top=0,left=0,width=" + xsq2Width + ",height=" + xsq2Height + "");
}
}
上のコードでは、新しいウィンドウを開いてジャンプし、私の論理では右から左にジャンプするはずですが、なぜかIE 9ではwindow.Open()は左にずれません.
そこで開いた新しいウィンドウの中でwindowを加速するつもりです.moveTo(-ディスプレイ幅、0);これにより、左にシフトする目的を達成します.
<span style="color: #000000;">
window.moveTo(</span>-1600, 0<span style="color: #000000;">);
</span>
最後に完全なコード、すなわちhtmlページを添付します.
DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>JavaScript title>
<script type="text/javascript">
window.onload = function () {
document.getElementById("btnZX").onclick = function () {
var locator = new ActiveXObject("WbemScripting.SWbemLocator");
var service = locator.ConnectServer(".");
//
var xsq = new Enumerator(service.ExecQuery("select * from Win32_DesktopMonitor"));
//
// 2 , 2 ; , 1
var xsq1Width;
var xsq1Height;
var xsq2Width;
var xsq2Height;
var i = 1;
for (; !xsq.atEnd() ; xsq.moveNext()) {
if (i == 1) {
xsq1Width = xsq.item().ScreenWidth;
xsq1Height = xsq.item().ScreenHeight;
} else if (i == 2) {
xsq2Width = xsq.item().ScreenWidth;
xsq2Height = xsq.item().ScreenHeight;
}
i++;
}
//
if (xsq2Width == null && xsq2Height == null) {
window.open("about:blank", "", "top=0,left=0,width=" + xsq1Width + ",height=" + xsq1Height + "");
}
else {
alert("
\twindow.screenLeft " + window.screenLeft + "
\twindow.screen.width " + window.screen.width
+ "
\txsq1Width " + xsq1Width + "
\txsq2Width " + xsq2Width);
// 1
if (window.screen.width == xsq1Width && window.screen.height == xsq1Height) {
if (window.screenLeft >= 0 && window.screenLeft < xsq1Width) {
//
window.open("about:blank", "", "top=0,left=" + xsq1Width + ",width=" + xsq2Width + ",height=" + xsq2Height + "");
}
if (window.screenLeft >= xsq1Width && window.screenLeft < (xsq1Width + xsq2Width)) {
//
window.open("about:blank", "", "top=0,left=0,width=" + xsq1Width + ",height=" + xsq1Height + "");
}
}
// 2
if (window.screen.width == xsq2Width && window.screen.height == xsq2Height) {
if (window.screenLeft >= 0 && window.screenLeft < xsq2Width) {
//
// ,
window.open("http://localhost:6019/NewPage.html", "", "top=0,left=0,width=" + xsq1Width + ",height=" + xsq1Height + "");
}
if (window.screenLeft >= (-xsq1Width) && window.screenLeft < 0) {
//
var objWin = window.open("about:blank", "", "top=0,left=0,width=" + xsq2Width + ",height=" + xsq2Height + "");
}
}
}
}
}
script>
head>
<body>
<div>
<button type="button" id="btnZX"> button>
div>
body>
html>
DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title> title>
head>
<body>
body>
html>
<script>
window.moveTo(-1600, 0);
script>
以上のすべてのコードは論理的により良い考え方があり、コード的に大きな最適化がある可能性があります.
また、この文章を読んだり、必要としたりした友达に、自分の意見を発表してください.ありがとうございます.