2011-10-12 28 views
9

Khi trang tải iframe có url kết thúc bằng #, trang gốc sẽ cuộn để nội dung của khung nội tuyến nằm ở đầu cửa sổ trình duyệt.Ngăn # neo trong khung nội tuyến bằng cách cuộn cửa sổ trình duyệt

Demo: http://jsfiddle.net/dTQEE/1/

Nếu URL kết thúc bằng #, ví dụ http://foo.com#, trình duyệt giả định bạn muốn chuyển lên đầu trang.

Làm cách nào để ngăn cửa sổ chính cuộn khi khung nội tuyến có đoạn băm được tải?

Sự cố xảy ra trong Chrome, không chắc chắn đó có phải là sự cố trong các trình duyệt khác hay không.

Ngay bây giờ giải pháp tốt nhất tôi có là sử dụng el.addEventListener('scroll', ...) để đặt lại scrollTop thành 0 nếu nó chưa được 0. Thao tác này, nhưng cuộn xuống và cuộn lên đều rất đáng chú ý.

+1

Bạn nhận được URL cho khung hình như thế nào? Không thể kiểm tra/chỉnh sửa trước khi tải nó? – sdleihssirhc

+1

Cảm ơn bạn đã đề xuất, nhưng # có thể có một số ý nghĩa đối với trang web nhận được đề xuất đó. JS trên trang bên trong khung nội tuyến có thể đang sử dụng nó, vì vậy tôi không thể xóa hoàn toàn nó. –

+0

đã bao giờ được giải quyết cho bạn chưa? –

Trả lời

0

Không chắc chắn điều này là có thể, nhưng bạn nên cố gắng nhấn vào sự kiện window.onhashchange và ngăn chặn mặc định. Nếu không, bạn sẽ phải băm băm nếu nó không được theo sau bởi bất kỳ thứ gì.

+0

Cảm ơn - Tôi đã thử điều đó trước đây. Onhashchange chỉ được kích hoạt khi giá trị băm của trang thay đổi, vì vậy nó không bị kích hoạt khi tải. –

+0

Trong chrome ít nhất, (không chắc chắn về các trình duyệt khác), sự kiện onhashchange đã hủy đặt thành false, vì vậy bạn không thể sử dụng preventDefault trên sự kiện. –

0

Tôi biết đây là một câu hỏi cũ, nhưng tôi đã xem xét nó trong tìm kiếm của tôi cho cùng một vấn đề. Tôi vừa đưa ra một giải pháp hoạt động tuyệt vời cho tôi trong Chrome.

<a href="dummylink.html" onclick="someFunction(); return false;"> 

Liên kết href được sử dụng cho các thanh trạng thái, nhưng vì return false; ở cuối, nó không thực sự đi bất cứ nơi nào. Sau đó, bạn chỉ cần thực hiện chuyển hướng của bạn (trong trường hợp của tôi là document.formName.submit();) trong số someFunction(); của bạn. Tuy nhiên, hãy nghĩ về nó, bạn có thể làm mọi thứ nội tuyến, nhưng điều đó không thực sự có vẻ tốt, trừ khi bạn chỉ có một việc để làm.

Lưu ý: Nếu someFunction();return false; ở cuối, điều đó sẽ không đủ để tránh nhảy.

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