2017-03-04 46 views
7
if(window.innerWidth) { 
    return window.innerWidth; 
} 
return $(window).width(); 

Tôi đang sử dụng mã ở trên để tìm độ rộng có sẵn của trang web. Nó hoạt động hầu hết thời gian. Nhưng trong một số trình duyệt di động (Mobile Chrome và một vài) và đôi khi trong trang web trên máy tính để bàn, nó trả về 0. Tôi không biết, điều gì đã xảy ra?Hành vi ngoài mong đợi của window.innerwidth

Mozilla/5.0 (Linux; Android 5.1.1; SM-J500M xây dựng/LMY48B) AppleWebKit/537,36 (KHTML, như Gecko) Chrome/56.0.2924.87 Mobile Safari/537,36

Đây là một trong tác nhân người dùng ở nơi không thành công. Chủ yếu là nó xảy ra trong chrome điện thoại di động trong trình duyệt Android.

+1

Khi nào mã này chạy? Trang có được tải đầy đủ khi cố gắng để có chiều rộng trang không? – Pytth

+0

Tôi đã nhìn thấy hành vi này khi máy tính bảng hoặc thiết bị di động đang phát "hình động thay đổi hướng" (cho muốn có cụm từ tốt hơn). Nếu bạn đang nghe các sự kiện onresize trên tài liệu, và quá trình chuyển đổi giữa dọc sang ngang xảy ra, việc đọc kích thước khung nhìn đôi khi dẫn đến 0 trong khi hoạt ảnh chuyển tiếp đang phát. Tôi chỉ có thể tưởng tượng đây là kết quả của việc hiển thị tối ưu hóa bên trong trình duyệt. – jduncanator

Trả lời

5

Bạn có thể thử bắt buộc thử nghiệm trong if là Boolean.

if(!!window.innerWidth) { 
    return window.innerWidth; 
} 
return $(window).width(); 

Có nhiều hơn return tuyên bố trong hàm không phải lúc nào cũng được coi là phương pháp hay nhất. Bạn có thể làm cho điều này rõ ràng hơn như sau.

return !!window.innerWidth ? 
    window.innerWidth : 
    $(window).width(); 

Nếu điều này không thành công thì vấn đề là bạn đã tìm thấy lỗi trong phương pháp chiều rộng của jQuery.

+1

cách hài hước để buộc một kiểm tra boolean haha. Tôi nghĩ trong trường hợp này bạn có thể viết 'return window.innerWidth || $ (window) .width(); 'vì nếu window.innerWidth trả về 0 hoặc undefined chúng ta vẫn muốn thử phương thức jQuery. – antoni

Các vấn đề liên quan