2010-06-14 33 views
5

Tôi có một trang html đang tải nhiều khung nội tuyến vào đó là hình ảnh động được nhúng được tạo từ trang máy chủ Tomcat (.jsp). Điều này hoạt động như mong đợi từ Chrome và Firefox, nhưng vì một số lý do, IE hiển thị tất cả các hình ảnh giống nhau (như hình ảnh đầu tiên). Tôi đã tạo một ví dụ:
Sự cố lưu vào bộ nhớ cache hình ảnh động của IE?

http://coupondiscounts.com/jsImageTest.html

jsImageTest.html - Trang này chỉ đơn giản là tải 6 trường hợp của trang testImageFrame.html trong iframe riêng một-at-a-thời gian, sử dụng Javascript.
testImageFrame.html - Đây là trang được tải trong tất cả các iframe. Nó chỉ chứa một khối JavaScript viết ra thời gian hiện tại và một thẻ img. Img được tạo động bởi trang .jsp trên một máy chủ khác. Nó sẽ là một hộp màu trắng trên nền đen. Trong hộp là thời gian hiện tại (từ máy chủ Tomcat sử dụng Java) và một cặp đôi được tạo ngẫu nhiên giữa 0 & 1.

Điều gì xảy ra (trong IE): Trang gần như ngay lập tức tải bốn iframe giống hệt nhau. Tùy thuộc vào tốc độ của máy, thời gian JavaScript có thể thay đổi theo một hoặc hai giây. Thời gian của hình ảnh sẽ giống nhau sẽ là số ngẫu nhiên. Điều này đúng ngay cả đối với hai iframe cuối cùng được tải 5 và 10 giây sau khi các iframe khác (sử dụng JavaScript setTimeout()).
Điều gì sẽ xảy ra (giống như trong Chrome và FF): Trang tải cùng 4 iframe, nhưng các số ngẫu nhiên trong hình ảnh sẽ khác nhau. Thời gian trong các hình ảnh đôi khi kéo dài một giây là tốt.

Bất kỳ ai có manh mối về những gì đang xảy ra ở đây? IE có đang thực hiện một số bộ nhớ đệm lạ? Tiêu đề hình ảnh có "không có bộ nhớ cache", "không lưu trữ" và tất cả điều đó. Tôi đã thử nó trên IE6 và 7. Bạn có thể sử dụng nút "Next" để tạo iframe khác. Trong IE, các hình ảnh luôn giống nhau.

Lưu ý: Tôi không thực sự cần iframe, chỉ là hình ảnh, nhưng nếu tôi chỉ sử dụng thẻ img, sự cố cũng xuất hiện trong Chrome và FF. Tôi cũng không thực sự cần tải các iframe động này, tôi chỉ đang cố gắng trừu tượng thêm vấn đề và cho phép tải trễ cho 2 hình ảnh sau.

Trả lời

0

Vượt qua biến phá vỡ bộ nhớ cache hoặc đặt tiêu đề không có bộ nhớ cache.

IE (không ý định chơi chữ)

<% 
response.setHeader("Cache-Control","no-cache"); //HTTP 1.1 
response.setHeader("Pragma","no-cache"); //HTTP 1.0 
response.setDateHeader ("Expires", 0); //prevents caching at the proxy server 
%> 
+0

-1 vì OP đã tuyên bố họ đã thử các bước này. – Jaymz

+0

... Undid downvote cho setDateHeader :) – Jaymz

+1

Tôi cũng đã nói một biến phá vỡ bộ nhớ cache. Nhiều trình duyệt sẽ không cache một trang có '? 'Trong url. Vì vậy, anh ta có thể sử dụng: http://hostname.com/mypage.jsp?time = sometime Edit: TY :) –

1

MSIE là tuyệt vời khi nói đến bộ nhớ đệm. Vấn đề ở đây là nó không tuân thủ các hướng dẫn bộ nhớ đệm như được chỉ định trong các tiêu đề của trang HTML "cha" từ nơi mà mã JS được thi hành.

Sự cố cụ thể của bạn có thể được giải quyết bằng cách thêm dấu thời gian vào chuỗi truy vấn.

ifr.src = 'testImageFrame.html?' + new Date().getTime(); 

này lực lượng MSIE bắn một thương hiệu yêu cầu GET mới từ JS trên.

+0

Điều này có vẻ giống như câu trả lời mà chúng tôi đã thảo luận. – rdevitt

+0

Nếu điều này không giải quyết được vấn đề, thì có thể bạn cần xóa bộ nhớ cache trước khi thử lại :) – BalusC

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