如何获取iframe内容的滚动位置

时间:2013-05-08 02:28:14

标签: javascript jquery html iframe scroll

我有一个html页面,其中包含一个加载某个任意页面的iframe。

<iframe id="siteframe" style="width: 400px; height: 400px;" src="http://www.cnn.com"></iframe>

我希望能够在javascript / jquery中获取页面里面 iframe的滚动位置。当涉及到html / js时,我仍然有点绿色,但我尝试了使用scrollTop和scrollLeft的一些不同变体,但没有成功。这是一个不起作用的:

write($("#siteframe").contents().scrollLeft() + ", " + $("#siteframe").contents().scrollTop());

这个不会写任何东西(写是一个只附加到屏幕上文字的方法)。

如果我删除这样的.contents()

write($("#siteframe").scrollLeft() + ", " + $("#siteframe").scrollTop());

它至少会向屏幕写入一些东西,但无论iframe中的实际滚动位置在哪里,它总是0,0。

在javascript中获取iframe内容的x,y位置的正确方法是什么,以便我的外页(包含iframe)可以使用它?

3 个答案:

答案 0 :(得分:4)

根据this stack overflow post,“结论是iframe中的任何内容都无法访问,即使是在我的域上呈现的滚动条也是如此。”讨论很广泛。除非您有权访问该域,否则根本无法从跨doamin iframe获取信息。

如果有人想玩它,这是我失败的测试代码:

<!DOCTYPE html>
<html>
<head>
  <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
</head>
<body>
<script>
function report() {
    var frame_top = $('#siteframe').contents().find('body').scrollTop();
    alert(frame_top);
}
</script>
<iframe id="siteframe" name="siteframe" style="width: 400px; height: 400px;" src="http://en.wikipedia.org/wiki/Hello_world"></iframe><br />
<button onclick="report()">Get Coords</button>
</body>
</html>

答案 1 :(得分:1)

您可以通过将子页面(内部iframe)中的滚动位置更新为父页面来解决此问题。

    // Child page
    $(window).scroll(function () {
        top.updateScrollPosition($('body').scrollTop(), $('body').scrollLeft());
    });

和父页面

    // Main page
    var topPos;
    var leftPos;

    function updateScrollPosition(top, left) {
        topPos = top;
        leftPos = left;
    }

然后在任何地方使用topPos,leftPos。

答案 2 :(得分:0)

要获取滚动位置,请使用窗口对象中存在的属性scrollX和scrollY。

写($(“#siteframe”)。scrollX +“,”+ $(“#siteframe”)。scrollY);

通过Google Chrome测试