Vì bạn chưa cung cấp jsFiddle, tôi không thể cho bạn biết bạn có thể làm gì sai, nhưng tôi đã cố gắng làm những gì bạn mô tả và tôi không thực sự trải nghiệm bất kỳ các vấn đề tương tự mà bạn đang gặp phải. Dường như nó hoạt động tốt trong tất cả các trình duyệt mà bạn đã đề cập. Miễn là bạn đảm bảo tài liệu trong iframe
được tải vào thời điểm bạn đang cố gắng để có được scrollWidth
và bạn đặt lại chiều rộng của iframe
thành 0px
trước khi bạn nhận được scrollWidth
. Điều này là để đảm bảo rằng scrollWidth
giữ chiều rộng của tài liệu, ngay cả khi tài liệu được tải trước đó rộng hơn tài liệu vừa được tải (trong trường hợp này, scrollWidth
sẽ giữ width
của tài liệu trước đó trong số iframe
).
Đây là số jsFiddle. Có một số mã ngẫu nhiên trong đó cho mục đích thử nghiệm và demo, The bit duy nhất mà là quan trọng cho bạn là:
var frame = document.getElementById("frame");
frame.onload = function() {
$("#frame").css("width", '0px');
$("#frame").css("width", frame.contentDocument.documentElement.scrollWidth + 'px');
}
Tôi đang sử dụng một số jQuery để làm cho nó dễ dàng hơn cho bản thân mình ở đây, nhưng có thể bạn có thể thay thế mà với bất kỳ mã nào bạn đã có để đặt width
của số iframe
và tôi đang sử dụng frame.contentDocument.documentElement.scrollWidth
thay vì frame.contentDocument.body.scrollWidth
. Điều này đảm bảo rằng tôi nhận được chiều rộng của phần tử html
thay vì phần tử body
, một phần của sự cố có thể là các thẻ html
hoặc body
trên tài liệu được tải vào iframe
có margins
hoặc paddings
.
Edit:
Tôi đã có thêm một chút của một đi và tôi thể được những hành vi chính xác mà bạn đang mô tả xảy ra cả trong Firefox và Chrome. Điều này xảy ra nếu tôi không đặt width
của iframe
thành 0px
trước khi đọc scrollWidth
, chiều rộng của tài liệu hiện được tải nhỏ hơn chiều rộng của tài liệu đã tải trước đó và tôi có overflow: visible
được đặt trên iframe
. Hãy xem here để biết ví dụ về hành vi. (Điều này xảy ra cả trong Chrome và trong Firefox, miễn là scrolling
được đặt thành yes
và overflow
được đặt thành visible
).
Dường như nếu tôi không đặt lại width
của iframe
, thì scrollWidth
giữ giá trị width
của tài liệu đã tải trước đó trừ đi chiều rộng của thanh cuộn dọc. Vì vậy, nếu tôi tiếp tục đặt width
thành scrollWidth
, mỗi lần tôi làm như vậy và tài liệu mới được tải nhỏ hơn tài liệu trước đó, thì width
của số iframe
giảm theo số lượng pixel tương đương với width
của cuộn dọc quán ba.
Kết luận: một sửa chữa dứt khoát sẽ được thiết lập width
của iframe
-0px
(hay bất cứ điều gì ít hơn hoặc bằng với minimum width
của tài liệu đó sẽ được nạp) trước khi đọc scrollWidth
của iframe
, điều này sẽ xảy ra sau khi tài liệu mới được tải.
Nguồn
2013-05-03 00:21:39
bạn có thể đưa ra ví dụ về jsfiddle không? –