Tôi vừa lãng phí một lượng đáng kinh ngạc của thời gian trên lỗi hoàn toàn vô lý này (biểu hiện ở chỉ IE7), trong cách trang web quá phức tạp để đặt mã ở đây, nơi element.className = element.className
không hoạt động.
Giải pháp tối ưu cho IE7 (tốt, kiểm tra ít nhất ở nơi tôi đã gặp phải lỗi) dường như được thực hiện TẤT CẢ các dòng dưới đây như một cái móc để bất kỳ thay đổi DOM:
try{
element.parentNode.style.cssText += "";
element.parentNode.style.zoom = 1;
element.style.cssText += "";
element.style.zoom = 1;
}catch(ex){}
Chúng ta đã có hai dòng đầu tiên (bao quanh với try-catch
) trong khung của chúng ta trong một thời gian dài, nhưng nó không đủ trong một số trường hợp cụ thể, nhưng thêm hai dòng tiếp theo đã sửa lỗi này.
Được thử nghiệm cả trong cửa sổ cực đại và không được phóng to.
try/catch
được đặt ra vì trong một số trường hợp nhất định (ví dụ: bên trong iframe
) nó có thể tạo ra lỗi JS sẽ phá vỡ ứng dụng (đây là thông tin từ đồng đội của tôi, tôi chưa tự mình gặp phải).
Ngược lại, đối với IE8, element.className = element.className
dường như được làm công việc của mình (yeah, tất cả chúng tôi yêu mã có điều kiện cho mỗi phiên bản ...)
Tôi yêu Win XP như một hệ điều hành, nhưng cho đến IE-bound mọi người sử dụng nó, chúng ta phải tìm những bản sửa lỗi bẩn thỉu cho những vấn đề điên rồ đó ... Chết tiệt buồn.
Sửa 2013.03.05
Đoạn trên dường như được làm việc trong hầu hết các tình huống, nhưng cũng không đủ ở một nơi.Bây giờ chúng tôi có các nội dung như thế này trong mã của chúng tôi:
try {
var s1 = domElt.parentNode.style, s2 = domElt.style;
var dummyCss = "foo:foo;"; // do not add leading ';' here!
s1.cssText += "";
s1.zoom = 1;
s2.cssText += dummyCss;
s2.cssText = s2.cssText.replace(dummyCss, "");
} catch (ex) {}
Có! Vấn đề này ảnh hưởng đến các yếu tố ngay bên dưới cơ thể, vì vậy tôi đang sử dụng: document.body.className = document.body.className; Cảm ơn! –
Sửa lỗi tuyệt vời Mmm - khắc phục sự cố reflow IE7 tôi đã có – John
điều đó. Là. tuyệt vời. – allixsenos