Javascript 包含外部wesbite的iframe不会触发onscroll事件处理程序
我理解,为了在iframe中正常启动onscroll事件处理程序,iframe必须包含与包含iframe的页面具有相同域名的站点。但是,对于包含外部站点的iframe,是否可以这样做呢 onscroll事件处理程序:Javascript 包含外部wesbite的iframe不会触发onscroll事件处理程序,javascript,jquery,html,iframe,scroll,Javascript,Jquery,Html,Iframe,Scroll,我理解,为了在iframe中正常启动onscroll事件处理程序,iframe必须包含与包含iframe的页面具有相同域名的站点。但是,对于包含外部站点的iframe,是否可以这样做呢 onscroll事件处理程序: <script type="text/javascript"> window.onload = function() { var frm = document.getElementById("test").contentWindow;
<script type="text/javascript">
window.onload = function() {
var frm = document.getElementById("test").contentWindow;
frm.onscroll = function(){
alert("iframe scrolled");
}
}
</script>
window.onload=函数(){
var frm=document.getElementById(“测试”).contentWindow;
frm.onscroll=函数(){
警报(“iframe滚动”);
}
}
上面的js代码适用于此:
<iframe id="test" src="http://www.<myDomain>.com"></iframe>
<iframe id="test" src="http://www.<anExternalSite>.com"></iframe>
但不是为了这个:
<iframe id="test" src="http://www.<myDomain>.com"></iframe>
<iframe id="test" src="http://www.<anExternalSite>.com"></iframe>
如果我不能做到这一点,我的整个应用程序将是无用的。有什么解决办法吗?有黑客吗?任意外部站点?没有
对外合作网站?让滚动事件监听器由站点本身绑定(到其主体元素),并使用来传递事件数据。看看Quentin的答案,或者做一些更粗糙的事情,使用代理()从您自己的域为外部站点提供服务,因为跨域策略不允许您这样做 请注意,代理将增加服务器上的通信量。请使用以下方法:
<html>
<head>
<style>
#iframeoverlay { position: absolute; width: same-as-iframe; height: sams-as-iframe; anything-else: sams-as-iframe; z-index: 1-or-higher-if-the-iframe-is-over-1; }
</style>
<script>
function alert() {
alert("iframe scrolled");
}
</script>
</head>
<body>
<iframe ... ></iframe><div id="iframeoverlay" onscroll="alert"></div>
</body>
</html>
#iframeoverlay{位置:绝对;宽度:与iframe相同;高度:sams作为iframe;任何其他:sams作为iframe;z索引:1或更高-if-the-iframe-is-over-1;}
函数警报(){
警报(“iframe滚动”);
}
不确定它是否有效,但试试看。我希望不会,xss已经很强大了:Pis stumbleupon.com就是这么做的吗?对不起,我是stumbleupon.com的新手,在哪里可以看到这个?[链接](gttp://stumbleupon.com). 这是一个stumbleupon URL的示例:不,他们正在从外部域加载该站点,但是,我在scroll上没有看到任何事情发生。。。您是否希望像他们一样调整iframe的高度?没有必要听iframe的内部滚动事件。对不起,我的错。查看stumbleupon页面的url,我希望stumbleupon也能像自己的网站一样为外部网站服务。但是看了一下代码,发现他们只是使用了一个iframe,外部站点url作为源。有没有一个使用代理的例子,你可以指给我看?你认为对于一个拥有众多(可能数百万)并发用户的应用程序来说,这仍然是正确的方法吗?iframeoverlay位于iframe之上,不会让iframe滚动。我也不能设置包含外部站点的iframe的scrollTop值。这可能就是解决这个问题的方法。但我的情况并非如此,因为我无法与外部网站合作。关于这件事,我又问了另一个问题。