В своё время написал заметочку о том как настроить vpn в Ubuntu и каждый день несколько человек приходит с поисковиков в поисках информации по этой теме. Так почему бы не написать ещё и про java script? Этот пост можно смело пропустить и не читать. Да.
Сегодня меня попросили написать некий скрипт, который смог бы определять в каком месте экрана у пользователя открыто окно браузера. Грубо говоря нужно определить видит ли пользователь открытую страницу (без учёта того, что она может быть под другим окном).
В результате у меня появилось несколько функций, которые могут быть полезны для решения каких-то других задач.
Определение размеров окна браузера.
function getClientWidth() {
return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientWidth:document.body.clientWidth;
}function getClientHeight() {
return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientHeight:document.body.clientHeight;
}
Определение координат окна браузера (левого верхнего угла)
function getWindowsX() {
var ret = 0;
if (window.screenX) ret = window.screenX;
else ret = window.screenLeft;
if (!ret) return 0;
else return ret;
}function getWindowsY() {
var ret = 0;
if (window.screenY) ret = window.screenY;
else ret = window.screenTop;
if (!ret) return 0;
else return ret;
}
Определение разрешения монитора пользователя
function getResolutionWidth() {
return screen.width;
}function getResolutionHeight() {
return screen.height;
}
Ещё открыл для себя особенность работы AJAX. Если открыть в браузере HTML файл, содержащий скрипт с асинхронным запросом на какой-то сервер, браузер не сможет выполнить этот запрос. Будет порождаться исключение, связанное с безопасностью (Permission denied to call method XMLHttpRequest.open), но стоит выложить файл на сервер и зайти на него по http, как всё заработает отлично.
Пришлось отказаться от AJAX и передавать параметры монитора и браузера пользователя путем "дёрганья" картинки с сервера с GET-параметрами.
Скорее всего, мой JavaScript не идеален, но он, вроде, работает в разных браузерах и под разными ОС.