2012-02-23 36 views
59

Trong tất cả các trình duyệt gần đây:How Do I Get innerWidth trong Internet Explorer 8

window.innerWidth // 1920 

Trong Internet Explorer 8

window.innerWidth // undefined 

cách tốt nhất để có được giá trị này trong IE8 là gì?

+1

Bạn đã khám phá [jQuery] (http://jquery.com) chưa? Nó rất dễ dàng để làm điều này bằng cách sử dụng nó. –

+0

có chắc chắn, $ (cửa sổ) .innerWidth() hoạt động tốt trong IE8, nhờ – antonjs

+4

@AntoJs '$ (cửa sổ) .innerWidth()' không trả về cùng một số như 'window.innerWidth' nếu thanh cuộn dọc hiển thị trên trang. –

Trả lời

111

Các innerWidth được hỗ trợ bởi IE9 không IE8, bạn có thể làm insteaad này:

var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; 

Dòng trên sẽ giúp bạn có được chiều rộng từ IE cũng như các trình duyệt tiêu chuẩn phù hợp khác.


Nếu bạn sử dụng jQuery, $(window).innerWidth() cũng sẽ cung cấp cho bạn kết quả mong muốn trong tất cả các trình duyệt.

+26

'$ (cửa sổ) .innerWidth()' không trả về cùng số với 'window.innerWidth' nếu thanh cuộn dọc hiển thị trên trang. –

+6

.innerWidth() không áp dụng cho các đối tượng cửa sổ và tài liệu, như được đề cập trong tài liệu jquery. http://api.jquery.com/innerWidth/ "Phương pháp này không áp dụng cho các đối tượng cửa sổ và tài liệu; vì vậy, sử dụng phương thức .width()." –

+0

Tôi cần 'document.body.clientWidth' ngay cả trong IE9 (quirks) – jan

2

Bạn có thể lấy thông tin này từ IE 8 với

document.documentElement.clientWidth 

Xin lưu ý rằng giá trị này sẽ không hoàn toàn giống nhau rằng IE 9 lợi nhuận cho window.innerWidth.

1

Without jQuery bạn có thể thử này để có được heightwidth

var myWidth = 0, myHeight = 0; 
if (typeof (window.innerWidth) == 'number') { //Chrome 
    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)) { //IE9 
    myWidth = document.body.clientWidth; 
    myHeight = document.body.clientHeight; 
} 
+1

Nhận xét 'Chrome' gây hiểu nhầm vì thuộc tính này được tất cả các trình duyệt hiện đại hỗ trợ: https://developer.mozilla.org/en-US/docs/Web/API/window.innerWidth?redirectlocale=en-US&redirectslug=DOM% 2Fwindow.innerWidth # Browser_compatibility ... bao gồm IE9 làm cho 'else if' lỗi thời. – retrovertigo

+1

Bạn đã đọc câu hỏi chưa? OP đã yêu cầu mã mà sẽ làm việc cho IE8 –

+1

cho phép tôi rephrase "... mà làm cho thứ hai 'khác nếu' lỗi thời". – retrovertigo

0
document.documentElement.clientWidth; 

này được sử dụng cho IE8 để có được những khách hàng rộng

4

cho ie8 sử dụng

document.documentElement.clientWidth 
-1

Hãy Lưu ý: Phương thức .innerWidth không áp dụng cho các đối tượng cửa sổ và tài liệu; cho những cái này, sử dụng .width() thay thế.

jquery api documentation for .innerwidth()

+1

Tôi biết đây là khoảng một tuổi ... nhưng OP không sử dụng jQuery ... –

5

Đối với việc này, tôi vẫn còn sử dụng:

window.innerWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; 
window.innerHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; 

Tuy nhiên, để bắt chước thực dom-getter hãy xem này: https://stackoverflow.com/a/18136089/1250044

4

Tôi biết rằng innerWidth có thể không khá giống nhau, nhưng cũng có thể sử dụng getBoundingClientRect với công suất tương tự:

elem = document.documentElement.getBoundingClientRect(); 
width = elem.getBoundingClientRect().right - elem.getBoundingClientRect().left; 
Các vấn đề liên quan