Показать сообщение отдельно
  #5 (permalink)  
Старый 11.03.2010, 16:41
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

Ну, на самом деле, есть способ узнать масштаб, но он грязный и требует четырех reflow, что не есть труъ.

function getScale(){ 
    var ct = document.createElement("div"); // создаем див
    ct.style.position = "fixed"; // задаем отображение от вьюпорта
    ct.style.margin = "0px"; // на всякий случай
    ct.style.width = "100%"; // ширина дива — ширина вьюпорта
    var sb = document.documentElement.style.overflow; // сохраняем старое значение overflow
    document.body.appendChild(ct); // вставляем в документ
    document.documentElement.style.overflow = "hidden"; // это значение действует на самом деле не на <html>, а на ICB, равный по ширине вьюпорту
    var zoomRatio = window.innerWidth / ct.clientWidth; // делим ширину окна на ширину вьюпорта 
    document.documentElement.style.overflow = sb; // возвращаем стиль на место
    document.body.removeChild(ct); // удаляем див
    return zoomRatio;
} 
alert("Масштаб:" + Math.round(getScale() * 100) + "%");


Проверял только на Опере 10.50, но, возможно, с минимальным изменением, будет работать и в других браузерах.

Про viewport, initial containing block («ICB») и прочее можно почитать тут.

И, последнее, прошу, не используйте это знание во зло — иногда пользователю самому виднее, как использовать фичи его браузера.
Ответить с цитированием