2012-02-24 13 views
8

Jaki jest najlepszy sposób uzyskania rzeczywistej wysokości strony (nie okna) w JS, która jest kompatybilna z wieloma przeglądarkami?Uzyskaj wysokość strony w JS (przeglądarka krzyżowa)

Widziałem kilka sposobów, ale wszystkie one zwracać różne wartości ...

self.innerHeight lub document.documentElement.clientHeight lub document.body.clientHeight lub coś innego?

Jednym ze sposobów to co wydaje się pracować to:

var body = document.body, 
    html = document.documentElement; 

var height = Math.max(body.scrollHeight, body.offsetHeight, 
         html.clientHeight, html.scrollHeight, html.offsetHeight); 
+1

możliwe duplikat [Get wysokości całego dokumentu z JavaScript] (http: // stackoverflow .com/questions/1145850/get-height-of-whole-document-with-javascript) –

+0

To powinno wystarczyć. Dzięki, Felix. –

+1

Czy potrafisz używać jquery? Jeśli tak, to ta odpowiedź może ci się przydać: http://stackoverflow.com/a/1304384/104435 – soniiic

Odpowiedz

0

Spróbuj to bez jQuery

//Get height 
var myWidth = 0, myHeight = 0; 
if (typeof (window.innerWidth) == 'number') { 
    myWidth = window.innerWidth; 
    myHeight = window.innerHeight; 
} else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) { 
    myWidth = document.documentElement.clientWidth; 
    myHeight = document.documentElement.clientHeight; 
} else if (document.body && (document.body.clientWidth || document.body.clientHeight)) { 
    myWidth = document.body.clientWidth; 
    myHeight = document.body.clientHeight; 
} 

nadzieję, że to pomaga.

+0

Próbowałem, że właśnie teraz w firebug na tej konkretnej stronie zwraca 456px wysokość, która jest niepoprawna ... –

+0

@ e-bacho2.0 Spróbuj ponownie i wyskoczy okno firebug. Otrzymuję tę samą wartość co '$ (window) .height();' <= to jest jQuery (i która jest poprawna) '705' w obu przypadkach. –

1
var width = window.innerWidth || 
      html.clientWidth || 
      body.clientWidth || 
      screen.availWidth; 

var height = window.innerHeight || 
      html.clientHeight || 
      body.clientHeight || 
      screen.availHeight; 

Powinien być dobrym sposobem, aby to osiągnąć.

+0

Nie działa też ... Jedyne rozwiązanie, które znalazłem do tej pory i działa poprawnie to ten, który jest w moim pytaniu. –

+0

Cóż, nie wiem jak to testujesz ... ale uruchomiłem to we wszystkich głównych przeglądarkach (Chrome, Firefox, Opera, IE9 +) js i działa idealnie. – Jonas

+1

ty dla rozwiązania nie jquery –

4

Strona/Wysokość dokumentu jest obecnie przedmiotem implementacji dostawcy (IE/Moz/Apple/...) i nie ma standardowej i spójnej przeglądarki wyników.

Patrząc na metodę JQuery .height();

if (jQuery.isWindow(elem)) { 
      // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode 
      // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat 
      var docElemProp = elem.document.documentElement[ "client" + name ], 
       body = elem.document.body; 
      return elem.document.compatMode === "CSS1Compat" && docElemProp || 
       body && body[ "client" + name ] || docElemProp; 

     // Get document width or height 
     } else if (elem.nodeType === 9) { 
      // Either scroll[Width/Height] or offset[Width/Height], whichever is greater 
      return Math.max(
       elem.documentElement["client" + name], 
       elem.body["scroll" + name], elem.documentElement["scroll" + name], 
       elem.body["offset" + name], elem.documentElement["offset" + name] 
      ); 

nodeType === 9 Średni DOCUMENT_NODE: http://www.javascriptkit.com/domref/nodetype.shtml więc nie rozwiązanie JQuery kod powinien wyglądać tak:

var height = Math.max(
        elem.documentElement.clientHeight, 
        elem.body.scrollHeight, elem.documentElement.scrollHeight, 
        elem.body.offsetHeight, elem.documentElement.offsetHeight) 
+0

Zamieszczasz tę samą odpowiedź jak Amar. Czy możesz uruchomić ten kod w firebugu, zaalarmować wysokość i powiedzieć mi, czy wynik jest poprawny? –

+0

Rozwiązanie Amar i poprzednio moje dotyczą obiektu przeglądarki "okno". – Krilivye

Powiązane problemy