2009-05-20 35 views
6

Tôi đã tạo một plugin mà tôi đã cắt xuống phần xương trần của plugin (tức là không có chức năng, chỉ cấu trúc) để gỡ lỗi vấn đề này và vẫn tồn tại. Nó đề cập đến việc thay đổi kích thước div và căn cứ trên chiều rộng của tài liệu.Chiều rộng cửa sổ JQuery không chính xác trong Chrome

Vấn đề là các tài liệu được báo cáo chiều rộng được giảm 17px so với chiều rộng thực tế của nó và do đó không kích thước các div một cách chính xác.

tôi đã đưa vào cảnh báo để tìm ra nơi mà vấn đề xảy ra: Trước khi "sẵn sàng" chức năng: 1780px (đúng chiều rộng) Bên trong "sẵn sàng" chức năng: 1763px Bên trong Plugin: 1763px (tất cả các giá trị trở về từ "document.width" và "$ (document) .width()" có cùng kết quả)

Điều này chỉ xảy ra trong Chrome và vẫn giữ nguyên ngay cả khi plugin bị giảm hiệu quả không có gì.

Bất kỳ suy nghĩ nào về lý do điều này xảy ra?

+0

Có thể là kích thước của thanh cuộn được trừ. Một số mã sẽ giúp nội địa hóa vấn đề. – Magnar

+0

Tôi đã thu hẹp nó đến một địa điểm cụ thể hơn. Nếu tôi có cảnh báo hiển thị trước khi chức năng sẵn sàng, sau khi nhấp vào OK, Div sẽ hiển thị chính xác. Nếu Cảnh báo này bị xóa, nó sẽ trở về độ dài thực tế là 17px. Có sự kiện nào khác hoặc sự kiện khác xảy ra khi cảnh báo được hiển thị không? – Stuart

+1

Tôi vừa xóa tất cả các văn bản giữ chỗ đã được ép thanh cuộn, và khoảng cách bây giờ đã giảm xuống một không gian có kích thước thanh cuộn. Tôi nghĩ rằng bạn là đúng trong đó chiều rộng thanh cuộn đã được trừ. Bất kỳ ý tưởng cho một workaround? – Stuart

Trả lời

2

Tôi nhận thấy rằng jQuery (cửa sổ) .width() trả về một giá trị sai trong Safari và Chrome.

+1

Webkit thực sự không tuân thủ các tiêu chuẩn W3C về việc xác định chiều rộng. Nó bao gồm thanh cuộn trong chiều rộng của cửa sổ mặc dù spec nói rằng nó không nên. Boooo! – dudewad

3

lấy từ jQuery documentation:

Trong khi JavaScript cung cấp tải sự kiện cho thực thi mã khi một trang được trả lại, sự kiện này không được kích hoạt cho đến khi toàn bộ tài sản như hình ảnh đã hoàn toàn nhận được. Trong hầu hết các trường hợp, tập lệnh có thể chạy ngay sau khi hệ thống phân cấp DOM được xây dựng hoàn chỉnh. Người xử lý đã thông qua tới .ready() được đảm bảo là được thực thi sau khi DOM sẵn sàng, vì vậy đây thường là nơi tốt nhất để đính kèm tất cả các trình xử lý sự kiện khác và chạy mã jQuery khác. Khi sử dụng tập lệnh dựa vào giá trị của thuộc tính phong cách CSS , điều quan trọng là phải các biểu định kiểu bên ngoài tham chiếu hoặc các yếu tố kiểu nhúng trước khi tham chiếu các tập lệnh.

Trong trường hợp mã dựa trên tài sản được nạp (ví dụ, nếu kích thước của một hình ảnh là bắt buộc), mã nên được đặt trong một handler cho sự kiện tải để thay thế.

có lẽ bạn nên sử dụng

$(window).load(function() {}); 

như kích hoạt sự kiện

+0

Nếu bạn đặt $ (cửa sổ) .width() trong bảng điều khiển, nó cũng sai. Nó không phải là vấn đề khi nó được gọi, đó là một vấn đề của Chrome bao gồm thanh cuộn như một phần của chiều rộng qua CSS nhưng trong JS, nó sử dụng chiều rộng cửa sổ với thanh cuộn trừ đi. – Sawtaytoes

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