Почему Firefox возвращает 0 как значение $(window).height()

Мне кажется, что Firefox должен быть лучше, чтобы вернуть правильное значение при использовании $(window).height().

Я использую jQuery 1.8.2. Это ошибка в этой конкретной сборке? Каждый другой браузер, который я тестировал, возвращает соответствующее значение при вычислении высоты видового экрана.

Чтобы обойти это, я использовал снипп ниже, чтобы применить значение пикселя к div.

$(window).bind('cwsObjectsShown', function() {
  var height = $(window).height();
  if (height === 0) {
     height = window.innerHeight;
  }
  height = height - '120';
  $('#game_objects').css('height', height + 'px');
});

Ответ 1

jQuery $(window).height() чувствителен к doctype. Попробуйте <! Doctype html >

В примечаниях к выпуску jQuery 1.8.1 говорится:

Не используйте режим Quirks! jQuery никогда не поддерживал режим Quirks, и мы не проводим никаких тестов в Quirks. Это может повлиять на значения типа $( "window" ). Height(), а результаты режима Quikks jQuery 1.8 изменились, чтобы поддерживать некоторые современные функции браузера. Большинство проблемных случаев мы видели от разработчиков, которые хотели быть в режиме Стандартов, но имели недействительный doctype или постороннюю разметку перед их тегом. Если вы сомневаетесь, используйте простой и короткий <! Doctype html > .

Например, с jQuery 1.8.2 и Firefox 16 я получаю действительный $(window).height() с doctype html, но высоту 0 с doctype html5. В Chromium 20 оба работают. (Спецификация W3C HTML5 говорит, что использовать doctype html, а не html5.)

Ответ 2

Попробуйте эту функцию:

function GetBrowserDim() {
    if (window.innerHeight) {
        return { w: window.innerWidth, h: window.innerHeight};
    } else {
        return { w: document.body.clientWidth, h: document.body.clientHeight };
    }
}

Ответ 3

в моем случае мне пришлось удалить атрибуты в элементе html

<html lang="en-US" prefix="og: http://ogp.me/ns#">

изменено на

<html>

теперь я получаю правильную ширину и высоту документа

Ответ 4

$(window).height(), а также $(window).width() возвращает 0 в IE когда в режиме совместимости. Не проверять это в FireFox, может быть одинаковым. попробуйте вместо этого использовать $(document).height() или $(document).width().

Ответ 5

Я нашел ответ на этот странный рендер высоты по jquery в Firefox...

Я использовал class= "no-js" в своем теге html с doctype... когда я удалил это, FF вычислил правильно... поэтому я добавил этот класс с jquery, как этот $('html'). addClass ( 'нет-JS');

теперь значение во всех браузерах одинаково.

Ответ 6

Попробуйте использовать следующий код:

$(function(){
  $(window).on('cwsObjectsShown', function() {
    alert($(this).height());
  });   
});

Ответ 7

Вы должны использовать <!DOCTYPE html> в начале, и все будет хорошо.