Javascript 如何获取iframe内部内容的滚动位置
我有一个html页面,其中包含一个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
<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
添加到iframetop:-20px/*或者其他一些值*/
,这将隐藏您根本不想显示的iframe部分…对于跨域iframe返回null或undefined。这意味着您可以访问帧源
// Main page
var topPos;
var leftPos;
function updateScrollPosition(top, left) {
topPos = top;
leftPos = left;
}