當有人點擊iframe(子頁面)中的鏈接時,如何讓父頁面滾動到頂部?問題是子頁面將保留在頁面的相同位置,因爲iframe的高度大於父頁面的高度。如何在iframe內點擊子頁面時將父頁面向上滾動?
請注意:父頁面和子頁面位於不同的子域。
我創建了一個演示,以證明這一點: http://www.apus.edu/_test/iframe/index.htm
當有人點擊iframe(子頁面)中的鏈接時,如何讓父頁面滾動到頂部?問題是子頁面將保留在頁面的相同位置,因爲iframe的高度大於父頁面的高度。如何在iframe內點擊子頁面時將父頁面向上滾動?
請注意:父頁面和子頁面位於不同的子域。
我創建了一個演示,以證明這一點: http://www.apus.edu/_test/iframe/index.htm
關鍵是要追加以下onload="window.parent.parent.scrollTo(0,0)"
到iframe
和應該這樣做!
在iframe頁面中。
window.parent.ScrollToTop(); // Scroll to top function
論parrent頁:
window.ScrollToTop = function(){
$('html,body', window.document).animate({
scrollTop: '0px'
}, 'fast');
};
如果你有交叉的起源(iframe和家長有不同的域),那麼就調用window.scrolTo(0,0)將無法正常工作。
交叉原點的一個解決方案是從iframe向父級發送可信消息。
代碼的iframe中:
var parent_origin = 'http://your/iframe/domain/here'
parent.postMessage({'task': 'scroll_top'}, parent_origin);
然後代碼在父:
function handleMessage(event) {
var accepted_origin = 'http://your/iframe/domain/here';
if (event.origin == accepted_origin){
if (event.data['task'] == 'scroll_top'){
window.scrollTo(0,0);
}
// you can have more tasks
} else{
console.error('Unknown origin', event.origin);
}
}
window.onload = function() {
window.addEventListener("message", handleMessage, false);
}
謝謝!如果您在iframe中的body標籤中執行onload =「window.parent.scrollTo(0,0)」,它也可以工作。 – aruanoc 2014-02-21 16:51:25
將onload添加到iframe標記比將其添加到body標記要性感得多,因爲如果他們使用CMS,很多人都不能手動標記「body」。好的建議,但! – Evan 2014-06-13 14:04:09
@aruanoc僅當iframe中的域與父域匹配時纔有效。 – voodoocode 2015-04-17 12:51:04