2012-06-14 24 views
6

Tôi nhận thấy một hành vi lạ với Internet Explorer khi trang của tôi nằm trong iframe. Dường như iframe tải lại chính nó khi gọi window.history.back(), mặc dù chỉ băm trong URL phải thay đổi. Khi trang không nằm trong iframe, trang đó hoạt động đúng và không tải lại trang. Bất kỳ ý tưởng tại sao điều này đang xảy ra và làm thế nào để ngăn chặn nó?window.history.back() tải lại trang trong Internet Explorer khi bên trong iframe?

Tôi tạo ra một fiddle mà sẽ chứng minh điều này trong IE9:

http://jsfiddle.net/peh96/5/

jsfiddle sử dụng iframe, vì vậy hành vi sẽ là hành vi iframe. Nhấp vào '#foo' và '#bar' sẽ thay đổi giá trị băm trong URL. Bây giờ nhấp vào liên kết 'BACK' sẽ kích hoạt window.history.back(). Lưu ý rằng dấu thời gian thay đổi khi bạn làm điều đó, cho biết trang đang tải lại.

Ngoài ra, nếu bạn nạp trực tiếp iframe:

http://fiddle.jshell.net/peh96/5/show/

bạn sẽ nhận thấy rằng dấu thời gian không thay đổi khi nhấp chuột 'trở lại'.

Đây chỉ là vấn đề với IE, vì Chrome và Firefox nhất quán dù bên trong khung nội tuyến hay không.

Bất kỳ ý tưởng nào về cách ngăn tải lại này?

+0

Chúng tôi cũng rất lo lắng bởi lỗi này: ( – Blackbird

+0

@Blackbird, giải pháp thay thế mà bạn đã chọn để giải quyết vấn đề này là gì? –

+0

không, thật không may :(Còn bạn thì sao? – Blackbird

Trả lời

2

Vâng, khi tôi chọn Quay lại lệnh từ trình đơn ngữ cảnh, nó cũng giống nhau. Trong IE10 bạn có thể sử dụng HTML5 State Management. Tôi sợ trong IE9 bạn phải theo dõi lịch sử băm và hơn thay đổi nó như thế này:

document.getElementById('back').addEventListener('click', function() { 
    window.location.hash = 'abc'; 
}, false); 

Sửa

Và những gì về điều này? Khi bạn gọi javascript:window.top.location.hash='bar', bạn có thể bắt sự kiện onhashchange trong cửa sổ chính và sau đó gọi scrollTo trong khung nội tuyến. Nhưng điều này chỉ hoạt động trong cùng một miền.

+0

Cảm ơn bạn Václav. Nhưng tôi tin eve có thêm trạng thái khác vào ngăn xếp lịch sử, đúng không? Vì vậy, trong khi nó sẽ làm việc, nó phá vỡ các trạng thái trở lại/về phía trước. –

+0

Đó là sự thật. Tôi sẽ cố gắng tìm ra một giải pháp khác. –

+0

Tôi hơi bối rối, nhưng có vẻ như http://jsfiddle.net/peh96/5/ cho thấy ví dụ ở chế độ quirks có thể khiến lịch sử trình duyệt bỏ qua # liên kết. Khi tôi mở http://fiddle.jshell.net/peh96/5/show/, nó hoạt động như mong đợi. Tất nhiên bạn phải cập nhật thời gian khi 'onhashchange' xảy ra. Kiểm tra mã của tôi: http://jsfiddle.net/ZGqHF/show/ –

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