如何在iframe中单击子页面时将父页面滚动到顶部?

Eva*_*van 35 iframe scroll parent

当有人点击iframe(子页面)中的链接时,如何让父页面滚动到顶部?问题是子页面将保留在页面的同一位置,因为iframe的高度比父页面大很多.

请注意:父页面和子页面位于不同的子域中.

我创建了一个演示来展示这个:http: //www.apus.edu/_test/iframe/index.htm

Eva*_*van 52

诀窍是将以下内容添加onload="window.parent.parent.scrollTo(0,0)"iframe应该执行的操作中!

  • @aruanoc仅在iframe中的域与父域匹配时才有效. (5认同)
  • 谢谢!如果你在iframe中的body标签中执行onload ="window.parent.scrollTo(0,0)",它也可以工作. (2认同)
  • 将onload添加到iframe标记比将其添加到body标签更加性感,因为如果他们使用CMS,很多人都可以选择手动标记"正文".不错的建议! (2认同)
  • @EstelleChvl我认为由于X-Origin政策,这是不可能的. (2认同)
  • 如果我错了请纠正我,但我认为:1.一个父母就够了,不需要parent.parent,2.这个代码必须附在iframe中子文档的body标签上.无法从父文档中执行此操作. (2认同)

Jam*_*ruk 12

在iframe中使用JavaScript,引用父级并调用scroll()方法.

window.parent.scroll(0,0);
Run Code Online (Sandbox Code Playgroud)


Doa*_*oaa 11

如果你有交叉起源(iframe和父节点有不同的域),那么只调用window.scrollTo(0,0)将不起作用.

一种跨源的解决方案是将来自iframe的可信消息发送到父级.

iframe内的代码:

var parent_origin = 'http://your/iframe/domain/here'
parent.postMessage({'task': 'scroll_top'}, parent_origin);
Run Code Online (Sandbox Code Playgroud)

那么父代码:

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);
}
Run Code Online (Sandbox Code Playgroud)


ste*_*njj 5

在 Iframe 页面内。

window.parent.ScrollToTop(); // Scroll to top function
Run Code Online (Sandbox Code Playgroud)

在父页面上:

window.ScrollToTop = function(){
  $('html,body', window.document).animate({
    scrollTop: '0px'
  }, 'fast');
};
Run Code Online (Sandbox Code Playgroud)