2013-04-18 26 views
5

Tôi có khung nội tuyến trong trang của mình, nội dung trong đó được thay đổi bằng cách nhấp vào các liên kết trong phần chính của trang. Tôi cố gắng để thay đổi kích thước chiều rộng của khung nội tuyến để phù hợp với nội dung, như vậy:Độ rộng không phù hợp cho khung nội tuyến trong FF/IE

frame.contentDocument.body.scrollWidth 

này hoạt động tốt trong Chrome, nhưng trong Firefox và IE, tôi nhận được một iframe mà co lại mỗi lần một liên kết mới được nhấp . FF dường như trừ 20-37px mỗi nhấp chuột.

Tôi có Google Stack và tìm kiếm Stack Overflow. Một số suggestions Tôi tìm thấy có liên quan đến các thuộc tính CSS hiển thị và tràn. Tôi đã thực hiện các thay đổi đối với CSS, nhưng nó không giúp được gì. Tôi cũng đã thử FF 21 Beta với hy vọng rằng nó được cố định ở đó, nhưng nó không phải là.

+4

bạn có thể đưa ra ví dụ về jsfiddle không? –

Trả lời

2

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 iframemargins 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 yesoverflow đượ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.

+0

Tôi đã không thực sự có thời gian để kiểm tra giải pháp, nhưng bạn đặt rất nhiều công việc trong vì vậy tôi sẽ cung cấp cho bạn tiền thưởng. Tôi sẽ đánh dấu nó là chính xác khi tôi có thể xác nhận. – CaptainThrowup

+0

@CaptainThrowup - Bạn đã xác nhận chưa? –

0

Thử sử dụng contentWindow thay vì contentDocument.