Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何获取iframe内部内容的滚动位置_Javascript_Jquery_Html_Iframe_Scroll - Fatal编程技术网

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

Javascript 如何获取iframe内部内容的滚动位置,javascript,jquery,html,iframe,scroll,Javascript,Jquery,Html,Iframe,Scroll,我有一个html页面,其中包含一个iframe加载一些任意页面 <iframe id="siteframe" style="width: 400px; height: 400px;" src="http://www.cnn.com"></iframe> 这一个永远不会写任何东西(write是一个只附加到屏幕上文本的方法) 如果像这样删除.contents(): write($("#siteframe").scrollLeft() + ", " + $("#sitefra

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

<iframe id="siteframe" style="width: 400px; height: 400px;" src="http://www.cnn.com"></iframe>
这一个永远不会写任何东西(write是一个只附加到屏幕上文本的方法)

如果像这样删除
.contents()

write($("#siteframe").scrollLeft() + ", " + $("#siteframe").scrollTop());
它至少会向屏幕写入一些内容,但无论iframe中的实际滚动位置在何处,它始终为0,0


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

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

写入($(“#siteframe”).scrollX+”,“++$(“#siteframe”).scrollY)

通过google Chrome进行测试,根据“结论是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>

功能报告(){
var frame_top=$('#siteframe').contents().find('body').scrollTop();
警报(框架顶部);
}

获得合作
您可以通过将滚动位置从子页面(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。

iFrame都很棘手,因为出于安全原因,它们限制了您访问它们中的内容。我认为你不能直接得到那个信息。一种替代方法是将iframe放大,并将iframe放在滚动div中,这样用户就可以滚动div而不是iframe本身。我现在没有时间保证这一切正常,祝你好运!如果你想隐藏iFrAME的一部分-考虑用“代码>溢出:隐藏:代码>样式化元素,并将负CSS
top
添加到iframe
top:-20px/*或者其他一些值*/
,这将隐藏您根本不想显示的iframe部分…对于跨域iframe返回null或undefined。这意味着您可以访问帧源
    // Main page
    var topPos;
    var leftPos;

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